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语句。这样使是相同一操作,而由于每次操作的数据不同所以使整个语句相匹配的机会极小,几乎不太可能匹配.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
- jdbc常用代码总结
- JDBC常用数据库驱动连接代码总结
- JDBC常用代码段
- Jdbc常用操作总结
- jdbc 总结 + 完整代码
- JDBC连接Mysql常用代码
- VB常用代码总结
- vc常用代码总结
- C#常用代码总结
- VB常用代码总结
- ABAP常用代码总结
- jquery常用代码总结
- iOS常用代码总结
- Unity常用代码总结
- javascript常用代码总结
- HTML常用代码总结
- Java常用代码总结
- Freemark 常用代码总结
- c#输出word格式文件
- C++面试题100题之前50题
- 机器视觉中常用的数据测试集
- PHP之fsockopen提交POST数据讲解
- win8 vs2012发布Web应用程序
- jdbc常用代码总结
- 黑马程序员-java内省学习笔记
- 谱聚类
- C#编码好习惯
- 迎接2013
- 2dx下,可以使用的字体
- unyaffs-安卓系统img解压工具
- Oracle数据库涉及的几种类型的用户
- Android:设置默认墙纸为自己Activity的背景