欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL-JDBC 博客分类: 数据库  

程序员文章站 2024-02-18 11:25:28
...

MySQL-JDBC

   JDBC是一种java数据库连接Api接口。JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果

   接下来便是开发步骤:

 1、     创建项目

 2、     右键项目,添加mysql-connector-java-5.1.29-bin.jar包。可以从MySQL官网下载mysql-connector-java-5.1.29.zip,解压后直接获得。

 3、     创建数据库。现在已经假定各位已经创建好自己的数据库了。

 4、     进行编程。编程完成之后,右键运行即可。

 

下面探讨一下核心代码:

 1、     连接数据库

 

Connection conn = null;
		String dburl = "jdbc:mysql://localhost:3306/cyw";
		String username = "cyw";
		String password = "";
		String driver = "com.mysql.jdbc.Driver";
		
		//先动态加载驱动,然后进行实例化
		Class.forName(driver).newInstance();
		//链接数据库
		conn = DriverManager.getConnection(dburl, username, password);

 

  

 2、     连结对象创建成功后,即可通过连结对象创建 statement 对象,以执行 SQL 语句。我们可将要执行的 SQL 语句分为两类,一类为需要返回结果表的 select 语句;一类为执行 insert update delete 操作的语句,因用程序只需要这类语句返回操作所生效的行数即可;对于这两种 SQL 操作, Statement 在执行时可采用不同的方法,如是 select 语句,则使用 executeQuery(sql)方法返回一个 ResultSet 对象,其中包含查询到的数据;如是另外三种,则使用 executeUpdate(sql)方法,返回一个 int 型值,代表语句所影响的行数。

 

关于查询方式,有三种,分别是statementprepareStatementCallableStatement。其中PrepareStatementStatement的子类、CallableStatementPrepareStatement的子类。

   Statement,又叫做拼装SQL语句。可以直接从conn链接对象获得,直接编译执行。

   PrepareStatement,又称预编译SQl语句。顾名思义,有一个预编译过程。数据库可以先将这些格式固定的SQL语句进行编译,存入数据库的缓存池里面。此时,并没与执行编译后的SQL语句,等到我们需要的时候,我们为?占位符赋值之后,就不用再次进行编译,而是直接运行。这是一种延迟加载的机制。能够有效的提高数据库的效率(毕竟只有在需要的时候才会进行运行,节省了资源),当然也克服了StatementSQL注入风险。

   CallableStatement是关于存储过程的,可下回分解。

 

//查询
     public  void query(String table, String colName, String temp) throws SQLException{
         String sql = "select * from "+table+" where "+colName+"=?";
        
         //一般使用预编译SQL语句,
         PreparedStatement ps = conn.prepareStatement(sql);
        
         //为每一个占位符?设置参数
         ps.setString(1, temp);
         ResultSet rs = ps.executeQuery();
        
         //进行显示
         while(rs.next()){
              int id = rs.getInt("id");
              System.out.println("id:"+id);
         }
}
 
//添加
     publicvoid add(String table) throws SQLException{
         String sql = null;
         if("datatable".equals(table)){
              sql = "insert into "+table+"(AT_id,type_id,data) values (?,?,?)";
         }
        
         PreparedStatement ps = conn.prepareStatement(sql);
         ps.setInt(1, 11);
         ps.setInt(2, 2);
         ps.setInt(3, 66);
 
         int count = ps.executeUpdate();
         if(count>0){
              System.out.println("插入数据成功!影响的记录条数是"+count);
         }else{
              System.out.println("插入数据失败!");
         }
     }

 

 

 

其他的类似。

 3、       结果集提取


MySQL-JDBC
            
    
    博客分类: 数据库  
 

如以上例子。

 4、      批处理

Statement提供了一个 addBatch(String sql)的方法将sql 加入批处理; PreparedStatement 对象的 addBatch()方法直接将预编译的 sql 加入批处理,最后可通过 executeBatch()方法一次性执行所有 sql。注意,这里 executeBatch()方法返回为一个 int[],数组的第 i 个元素的值代表加入批处理的第 i sql 所影响的行数。

     

//测试批量处理
     publicvoid bacthInsert(){
         try {
              String sql = "insert into datatable(AT_id,type_id,data) values(?,?,?)";
              PreparedStatement ps = conn.prepareStatement(sql);
              for(int i=0;i<10;i++){
                   ps.setInt(1, i);
                   ps.setInt(2, i);
                   ps.setInt(3, i);
                   ps.addBatch();
              }
              int[] result = ps.executeBatch();
              for(int i : result)
                   System.out.println(i);
         } catch (SQLException e) {
              System.out.println("批量处理失败");
              e.printStackTrace();
         }
}
 

 

 5、       事务

事务是指一个单元的工作,要么全部执行,要么就是全部不执行,非01.

Mysql可以通过手动提交进入事务机制。

详细以后再讲,以下是核心代码:

Conn.setAutoCommit();   //false,设置为手动提交,否则为自动提交

Conn.rollback()       //回滚到起始状态。    

关于事务级别:

Conn.setTransactionIsolation(事务级别常量);

Conn.getTransactionIsolation();

关于SavePoint接口(类似于存档点):

Java.sql.Savepoint txpoit = conn.setSavePoint(String SavePoint的名字);

Conn.rollback(txpoint);         //回滚到上一个SavePoint

Conn.releaseSavePoint(String SavePoint的名字);        //释放SavePoint

 6、       数据库连接池

为了减少运行过程中,数据库频繁创建、销毁连接,而消耗的资源,设立了数据库连接池,相当于一个数组或者集合类,存放了一些数据库连接。当需要时,便可以从连接池取得连接,不需要时便返回到连接池里面。

Connection 的建立较之线程更为费时,不但要建立底层的 TCP/IP 链路,还要通过复杂的数据库安全认证计算,这就有必要采用“连结池”技术。

网上有很多关于数据库连接池的开源实现,比如DBCPHibernateC3P0组件等等。

 7、    元数据查询

元数据,可以理解为数据的数据,如数据库版本号、表的列数,列名,某列数据类型等, JDBC 中可以得到两种元数据类型,一种是通过 Connection 对象的 getMetaData()方法得到 DatabaseMetaData对象用来取得数据库的相关信息;另一种是通过 ResultSet 对象的 getMetaData()方法得得结果集的元数据 ResultSetMetaData 对象用来取得结果集,如列个数等相关信息。

核心代码:

//取得数据库的元数据对象
DatabaseMetaData dmd=conn.getMetaData();
String dbName=dmd.getDatabaseProductName();
String dbVersion= dmd.getDatabaseProductVersion();

 

//得到结果集的元数据对象
ResultSetMetaData rmd=rs.getMetaData();
//结果集有几列
int columCount=rmd.getColumnCount();
//打印出每一列的标题
for(int i=1;i<=columCount;i++){
System.
out.print(rmd.getColumnName(i)+"\t");
}

 

 


MySQL-JDBC
            
    
    博客分类: 数据库  
 

  • MySQL-JDBC
            
    
    博客分类: 数据库  
  • 大小: 41.7 KB
  • MySQL-JDBC
            
    
    博客分类: 数据库  
  • 大小: 54.7 KB