JDBC连接数据库经验技巧集萃-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

JDBC连接数据库经验技巧集萃

简介:

Java数据库连接(JDBC)由一组用 Java 编程语言编写的类和接口组成。JDBC 为工具/数据库开发人员提供了一个标准的 API,使他们能够用纯Java API 来编写数据库应用程序。然而各个开发商的接口并不完全相同,所以开发环境的变化会带来一定的配置变化。本文主要集合了不同数据库的连接方式。

一、连接各种数据库方式速查表

下面罗列了各种数据库使用JDBC连接的方式,可以作为一个手册使用。 
 


  1. 1、Oracle8/8i/9i数据库(thin模式)   
  2.  
  3.  
  4. Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();   
  5. String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为数据库的SID   
  6. String user="test";   
  7. String password="test";   
  8. Connection conn= DriverManager.getConnection(url,user,password);    
  9.  
  10.  
  11.   2、DB2数据库   
  12.  
  13.  
  14. Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();   
  15. String url="jdbc:db2://localhost:5000/sample"; //sample为你的数据库名   
  16. String user="admin";   
  17. String password="";   
  18. Connection conn= DriverManager.getConnection(url,user,password);    
  19.  
  20.  
  21.   3、Sql Server7.0/2000数据库   
  22.  
  23.  
  24. Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();   
  25. String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";   
  26. //mydb为数据库   
  27. String user="sa";   
  28. String password="";   
  29. Connection conn= DriverManager.getConnection(url,user,password);    
  30.  
  31.  
  32.   4、Sybase数据库   
  33.  
  34.  
  35. Class.forName("com.sybase.jdbc.SybDriver").newInstance();   
  36. String url =" jdbc:sybase:Tds:localhost:5007/myDB";//myDB为你的数据库名   
  37. Properties sysProps = System.getProperties();   
  38. SysProps.put("user","userid");   
  39. SysProps.put("password","user_password");   
  40. Connection conn= DriverManager.getConnection(url, SysProps);    
  41.  
  42.  
  43.   5、Informix数据库   
  44.  
  45.  
  46. Class.forName("com.informix.jdbc.IfxDriver").newInstance();   
  47. String url = "jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;   
  48. user=testuser;password=testpassword"; //myDB为数据库名   
  49. Connection conn= DriverManager.getConnection(url);    
  50.  
  51.  
  52.   6、MySQL数据库   
  53.  
  54.  
  55. Class.forName("org.gjt.mm.mysql.Driver").newInstance();   
  56. String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"   
  57. //myDB为数据库名   
  58. Connection conn= DriverManager.getConnection(url);    
  59.  
  60.  
  61.   7、PostgreSQL数据库   
  62.  
  63.  
  64. Class.forName("org.postgresql.Driver").newInstance();   
  65. String url ="jdbc:postgresql://localhost/myDB" //myDB为数据库名   
  66. String user="myuser";   
  67. String password="mypassword";   
  68. Connection conn= DriverManager.getConnection(url,user,password);    
  69.  
  70.  
  71.   8、access数据库直连用ODBC的  
  72.  
  73.  
  74. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;  
  75. String url="jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ="+application.getRealPath("/Data/ReportDemo.mdb");  
  76. Connection conn = DriverManager.getConnection(url,"","");  
  77. Statement stmtNew=conn.createStatement() ;  

 二、JDBC连接MySql方式

下面是使用JDBC连接MySql的一个小的教程 

1、查找驱动程序

MySQL目前提供的java驱动程序为Connection/J,可以从MySQL官方网站下载,并找到mysql-connector-java-3.0.15-ga-bin.jar文件,此驱动程序为纯java驱动程序,不需做其他配置。

2、动态指定classpath

如果需要执行时动态指定classpath,就在执行时采用-cp方式。否则将上面的.jar文件加入到classpath环境变量中。

3、加载驱动程序

 


  1. try{  
  2.  Class.forName(com.mysql.jdbc.Driver);  
  3.  System.out.println(Success loading Mysql Driver!);  
  4. }catch(Exception e)  
  5. {  
  6.  System.out.println(Error loading Mysql Driver!);  
  7.  e.printStackTrace();  
  8. }  

4、设置连接的url


  1. jdbc:mysql://localhost/databasename[?pa=va][&pa=va]  

用个例子来说明一下:

 


  1. import java.sql.*;  
  2. import oracle.sql.*;  
  3. import oracle.jdbc.pool.OracleDataSource;  
  4.  
  5. public class JdbcOracle {  
  6.   public static void main(String[] args) {  
  7.  
  8.     /**URL格式:drivername:@driver_information  
  9.        1,drivername主要有以下两种  
  10.        jdbc:oracle:thin (thin驱动程序)  
  11.        jdbc:oracle:oci (oci驱动程序)  
  12.        2,driver_information  
  13.        host_nameort:database_sid  
  14.      */ 
  15.  
  16.     Connection conn = null;  
  17.     Statement stmt = null;  
  18.     ResultSet rs = null;  
  19.     String url = "jdbc:oracle:thin:@localhost:1521:ORADB";  
  20.     String username = "scott";  
  21.     String password = "tiger";  
  22.     try {  
  23.  
  24.       /**一、注册驱动程序  
  25.           方法一Class.forName("oracle.jdbc.OracleDriver";  
  26.        */ 
  27.  
  28.       DriverManager.registerDriver(new oracle.jdbc.OracleDriver());  
  29.  
  30.       //二、打开数据库连接  
  31.       /**方法一,使用oracle数据源对象?  
  32.            oracle.jdbc.pool.OracleDataSource ds=new oracle.jdbc.pool.OracleDataSource();  
  33.           ds.setServerName("localhost";  
  34.           ds.setDatabaseName("ORADB";   //数据库存名  
  35.           ds.setDriverType("oci";  //要使用的JDBC驱动程序(OracleDatasore的扩展)  
  36.           ds.setURL("jdbc:oracle:thin:@localhost:1521:ORADB"; //指定数据库的URL(OracleDataSource的扩展)  
  37.           ds.setDataSourceName("";     //底层数据源的名称  
  38.           ds.setNetworkProtocol("tcp";//用于数据库通信的协议  
  39.           ds.setPortNumber(1521);//端口号  
  40.           ds.setUser("scott";  
  41.           ds.setPassword("tiger";  
  42.           Connection conn=ds.getConnection();  
  43.        */ 
  44.       //方法二、使用Drivermanger  
  45.  
  46.       conn = DriverManager.getConnection(url, username, password);  
  47.  
  48.       //设置事务提交模式  
  49.       //conn.setAutoCommit(true);  
  50.       //若禁止了自动提交模式,那么在关闭Connection对象时会执行一次自动隐式提交,以保证还没有提交的所有DML语句被自动提交  
  51.  
  52.       conn.setAutoCommit(false);  
  53.  
  54.       //三、创建JDBC Statement对象  
  55.  
  56.       stmt = conn.createStatement();  
  57.  
  58.       //PreparedStatement pstmt=conn.prepareStatement("带有参数的SQL语句";  
  59.       //CallableStatement cstmt=conn.prepareCall("调用存储过程的语句";  
  60.       //四、从数据库获取行  
  61.       /**select 语句用executeQuery()  
  62.           insert,update,delete语句用executeUpdate()  
  63.           若预先不知道要执行的SQL语句类型,那么用execute()  
  64.        */ 
  65.  
  66.       rs = stmt.executeQuery("select id,name,age,sex,birth from employee";  
  67.  
  68. //五、从数据库获取行  
  69.  
  70.       while (rs.next()) {  
  71.         int id = rs.getInt("id";  
  72.         String name = rs.getString("name";  
  73.         int age = rs.getInt("age";  
  74.         String sex = rs.getString("sex";  
  75.         Date birth = rs.getDate("birth";  
  76.       }  
  77.       //rs.close();  
  78.       //六、向数据库中添加行(注:月份的编码是从0开始的,因此月份1代表2月)  
  79.  
  80.       java.sql.Date date = new java.sql.Date(821005);  
  81.       int i = stmt.executeUpdate("insert into employee values" +  
  82.                                  "(1,'qds',22,'1',TO_DATE(date,'YYYY,MM,DD'))";  
  83.       //七、修改数据中的行  
  84.  
  85.       int j = stmt.executeUpdate("update employee set age=21 where id=1";  
  86.       //八、从数据库中删除行  
  87.  
  88.       int k = stmt.executeUpdate("delete from employee set id=1";  
  89.       //九、处理数据库的NULL值方法一:使用结果集对象的wasNull方法判断  
  90.  
  91.       conn.commit();  
  92.       rs = stmt.executeQuery(  
  93.           "select id,type_id,prod_name from product where id=1";  
  94.  
  95.       //此次假设type_id列为Null值  
  96.       System.out.println("id=" + rs.getInt("id");  
  97.       System.out.println("type_id=" + rs.getInt("type_id");  
  98.       if (rs.wasNull()) {  
  99.         System.out.println("type_id was null!";  
  100.       }  
  101.       System.out.println("prod_name=" + rs.getString("prod_name");  
  102.  
  103.       //九、处理数据库的NULL值方法二:使用JAVA包装器类.因为JAVA包装器类可以赋于NULL值  
  104.       //java.lang.Integer typeId=(java.lang.Integer)rs.getObject("type_id";  
  105.       //System.out.println(typeId);此时typeId的值为Null  
  106.       //在向数据库插入或更新某一行为NULL值时,也可以使用JAVA包装器对象  
  107.       //java.lang.Double price=null;  
  108.       //int ii=stmt.executeUpdate("update products set price="+price+" where id=12";  
  109.  
  110.       rs.close();  
  111.  
  112.       //十,执行数据定义语言语句(DDL:CREATE,ALTER,DROP)----采用execute()方法执行DDL语句  
  113.       //执行DDL语句会导致一次隐式提交,因此,如果你在发出DDL语句之前执行了一些未提交的DML语句,那么这些DML语句将被提交  
  114.  
  115.       boolean result = stmt.execute("create table customers(" +  
  116.           "id integer constraint customers_pK primary key," +  
  117.           "first_name varchar2(10) not null," +  
  118.           "last_name  varchar2(10) not null," +  
  119.           "dob        date," +  
  120.           "phone      varchar2(15)" +  
  121.           "" 
  122.           ;  
  123.       if (result == true) {  
  124.         System.out.println("The table has Created!";  
  125.       }  
  126.       else {  
  127.         System.out.println("The table hasn't Create";  
  128.       }  
  129.       //-------------------------------------------------------------------------     
  130.     }  
  131.     catch (Exception e) {  
  132.       System.out.println("error: " + e);  
  133.       try {  
  134.         conn.rollback();  
  135.       }  
  136.       catch (SQLException sqle) {}  
  137.     }  
  138.     finally {  
  139.  
  140.       try {  
  141.         if (rs != null)  
  142.           rs.close();  
  143.       }  
  144.       catch (SQLException sqle) {  
  145.         System.out.println("SQLState: " + sqle.getSQLState());  
  146.         System.out.println("SQLErrorCode: 错误代码" + sqle.getErrorCode());  
  147.         System.out.println("SQLErrorMessage:错误情况的字符串 " + sqle.toString());  
  148.       }  
  149.  
  150.       try {  
  151.         if (stmt != null)  
  152.           stmt.close();  
  153.       }  
  154.       catch (SQLException sqle1) {  
  155.         System.out.println("SQLState: " + sqle1.getSQLState());  
  156.         System.out.println("SQLErrorCode: 错误代码" + sqle1.getErrorCode());  
  157.         System.out.println("SQLErrorMessage:错误情况的字符串 " + sqle1.toString());  
  158.       }  
  159.  
  160.       try {  
  161.         if (conn != null)  
  162.           conn.close();  
  163.       }  
  164.       catch (SQLException sqle2) {  
  165.         System.out.println(sqle2.toString());  
  166.         System.out.println(sqle2.getSQLState());  
  167.         System.out.println(sqle2.getErrorCode());  
  168.       }  
  169.  
  170.     }  
  171.  
  172.   }  
  173. }  

 本文转自sucre03 51CTO博客,原文链接:http://blog.51cto.com/sucre/381833,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章