jdbc常用代码总结

来源:互联网 发布:免费彩铃制作软件 编辑:程序博客网 时间:2024/05/17 03:13

平时使用框架都比较少再直接写jdbc了,突然想写都有点写不出来,现在还是把jdbc的代码再梳理一下,主要是mysql和oracle的。

jdbc有以下几步:

(1)加载数据库驱动

(2)连接Connection对象(设为conn)

(3)创建Statement对象(设为stat)

(4)执行sql语句返回结果集(设为rs)(查询)

(5)按照刚才创建的顺序反过来关闭:

①关闭结果集rs;

②关闭stat对象;

③关闭conn对象

(6)记得要进行异常处理,主要的就是SQLException

一、jdbc代码示例:

MySql的jdbc:

import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class Mysql {public static void main(String[] args){String driver = "com.mysql.jdbc.Driver";//数据库驱动String url = "jdbc:mysql://localhost:3306/**";//**指的是数据库名称String username = "root";//数据库用户名String password = "root";//数据库密码Connection conn = null;Statement stat = null;ResultSet rs = null;try{Class.forName(driver);//加载数据库驱动conn = DriverManager.getConnection(url,username,password);//连接Connection对象stat = conn.createStatement();//创建Statement对象String sql = "select userid,username,password from t_user";rs = stat.executeQuery(sql);//执行sql语句返回结果集while(rs.next()){int userid = rs.getInt("userid");String name = rs.getString("username");String pwd = rs.getString("password");System.out.println("id:"+userid+"\tname:"+name+"\tpassword:"+pwd);}} catch(ClassNotFoundException e){e.printStackTrace();} catch(SQLException e){e.printStackTrace();} finally {if(rs != null){try{rs.close();//关闭结果集rs} catch(SQLException e){e.printStackTrace();} finally {if(stat != null){try{stat.close();//关闭stat对象} catch(SQLException e){e.printStackTrace();} finally {if(conn != null){}try{conn.close();//关闭conn对象} catch(SQLException e){e.printStackTrace();}}} }}}}}

oracle的jdbc和mysql的类似,不一样的是数据库驱动driver与url,它们分别是:

String driver = "oracle.jdbc.driver.OracleDriver";//数据库驱动String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";//orcl指的是数据库实例名称

oracle的jdbc:

import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class Oracle {public static void main(String[] args){String driver = "oracle.jdbc.driver.OracleDriver";//数据库驱动String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";//orcl指的是数据库实例名称String username = "scott";String password = "tiger";Connection conn = null;Statement stat = null;ResultSet rs = null;try{Class.forName(driver);conn = DriverManager.getConnection(url,username,password);stat = conn.createStatement();String sql = "select empno,ename from emp";rs = stat.executeQuery(sql);while(rs.next()){String empno = rs.getString("empno");String ename = rs.getString("ename");System.out.println("\tempno:"+empno+"\tename:"+ename);}} catch(ClassNotFoundException e){e.printStackTrace();} catch(SQLException e){e.printStackTrace();} finally {if(rs != null){try{rs.close();} catch(SQLException e){e.printStackTrace();} finally {if(stat != null){try{stat.close();} catch(SQLException e){e.printStackTrace();} finally {if(conn != null){}try{conn.close();} catch(SQLException e){e.printStackTrace();}}} }}}}}

在创建Statement对象这一步的时候,可以使用PreparedStatement对象来提高性能:

PreparedStatement pst = null;pst = conn.prepareStatement("select userid,username,password from t_user");rs = pst.executeQuery();

如果是有参数的情况下,如下:

pst = conn.prepareStatement("select userid,username,password from t_user where username = ?");pst.setString(1, "admin");//第一个问号所代表的参数,多个参数的话可以一直按这种方式设置rs = pst.executeQuery();

使用PreparedStatement对象的优点在于:


PreparedStatement在conn.prepareStatement(sql)时就把sql语句传给它,这样它会在数据库端进行预编译(包含占位符),下次execute或者executeQuery时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中(相当于一个涵数)就会得到执行。其实这并不是说只有一个Connection中多次执行的预编译语句被缓存,这是PreparedStatement借助数据库的编译sql语句的原理来实现的优先做法而已。

Statement在conn.createStatement()时不传sql语句,而是在execute或者executeQuery时传过去死的sql语句。这样使是相同一操作,而由于每次操作的数据不同所以使整个语句相匹配的机会极小,几乎不太可能匹配.
 ②
  使用Statement要给它传死的拼接的sql语句,其实这样做是很不安全的,有发生恶意sql语句注入的危险。比如:
  String sql="select * from t_user where name='zhangs' and passwd='zhangs123'"
  而我恶意给你注入一个"or 1=1",就成了
  String sql="select * from t_user where name='zhangs' and passwd='zhangs123' or 1=1"
  这样,你的密码就失去了功效。

以下是常用的数据库的数据库驱动和url,方便以后查找:

MySQL:       String Driver="com.mysql.jdbc.Driver";    //驱动程序    String URL="jdbc:mysql://localhost:3306/db_name";    //连接的URL,db_name为数据库名       String Username="username";    //用户名    String Password="password";    //密码    Class.forName(Driver).new Instance();    Connection con=DriverManager.getConnection(URL,Username,Password);Microsoft SQL Server 2.0驱动(3个jar的那个):    String Driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";    //连接SQL数据库的方法    String URL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_name";    //db_name为数据库名    String Username="username";    //用户名    String Password="password";    //密码    Class.forName(Driver).new Instance();    //加载数据可驱动    Connection con=DriverManager.getConnection(URL,UserName,Password);    //Microsoft SQL Server 3.0驱动(1个jar的那个): // 老紫竹完善    String Driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";    //连接SQL数据库的方法    String URL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_name";    //db_name为数据库名    String Username="username";    //用户名    String Password="password";    //密码    Class.forName(Driver).new Instance();    //加载数据可驱动    Connection con=DriverManager.getConnection(URL,UserName,Password);    //Sysbase:    String Driver="com.sybase.jdbc.SybDriver";    //驱动程序    String URL="jdbc:Sysbase://localhost:5007/db_name";    //db_name为数据可名    String Username="username";    //用户名    String Password="password";    //密码    Class.forName(Driver).newInstance();       Connection con=DriverManager.getConnection(URL,Username,Password);Oracle(用thin模式):    String Driver="oracle.jdbc.driver.OracleDriver";    //连接数据库的方法    String URL="jdbc:oracle:thin:@loaclhost:1521:orcl";    //orcl为数据库的SID    String Username="username";    //用户名    String Password="password";    //密码    Class.forName(Driver).newInstance();    //加载数据库驱动    Connection con=DriverManager.getConnection(URL,Username,Password);   PostgreSQL:    String Driver="org.postgresql.Driver";    //连接数据库的方法    String URL="jdbc:postgresql://localhost/db_name";    //db_name为数据可名    String Username="username";    //用户名    String Password="password";    //密码    Class.forName(Driver).newInstance();       Connection con=DriverManager.getConnection(URL,Username,Password);DB2:    String Driver="com.ibm.db2.jdbc.app.DB2.Driver";    //连接具有DB2客户端的Provider实例    //String Driver="com.ibm.db2.jdbc.net.DB2.Driver";    //连接不具有DB2客户端的Provider实例    String URL="jdbc:db2://localhost:5000/db_name";    //db_name为数据可名    String Username="username";    //用户名    String Password="password";    //密码    Class.forName(Driver).newInstance();       Connection con=DriverManager.getConnection(URL,Username,Password);Informix:    String Driver="com.informix.jdbc.IfxDriver";       String URL="jdbc:Informix-sqli://localhost:1533/db_name:INFORMIXSER=myserver";    //db_name为数据可名    String Username="username";    //用户名    String Password="password";    //密码    Class.forName(Driver).newInstance();       Connection con=DriverManager.getConnection(URL,Username,Password);JDBC-ODBC:    String Driver="sun.jdbc.odbc.JdbcOdbcDriver";    String URL="jdbc:odbc:dbsource";    //dbsource为数据源名    String Username="username";    //用户名    String Password="password";    //密码    Class.forName(Driver).newInstance();       Connection con=DriverManager.getConnection(URL,Username,Password);

二:注册jdbc驱动程序的三种方式:

mysql:

1.        Class.forName(driver);2.        System.setProperty("jdbc.drivers", driver);3.        DriverManager.registerDriver(new com.mysql.jdbc.Driver());

同理,oracle不同的地方就在于第三种:

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver())

1中,不需要.newInstance()
2中,通过系统的属性设置即可
3中,是看起来比较直观的一种方式,注册相应的db的jdbc驱动,

总结:推荐1,和2两种方式。
原因:3在编译时需要导入对应的lib。1,2不需要。

补充:2的方式的话,可以同时导入多个jdbc驱动,中间用冒号“:”分开




参考资料:

http://www.cnblogs.com/Nbge/archive/2012/07/03/2574172.html

 “点点滴滴” 博客,http://kin111.blog.51cto.com/738881/168295

http://yangfei520.blog.51cto.com/1041581/304484

原创粉丝点击