Java使用JDBC操作数据库

Java 使用JSBC操作数据库


JDBC
1、JDBC是开发数据库引用的java API,通过JDBC,使用Java设计的程序能够执行SQL语言、获取结果、在用户界面中显示数据,并且能将所做的改动传回数据库,同时JDBC API可用于分布式异型机环境中国多种数据源之间的交互;
2、一般使用Java开发数据库应用需要用到4个主要的接口: Driver、Connection、Statement、ResultSet,
这些接口都定义在  java.sql 中;

以下是主要步骤
(1)加载驱动程序:
Class.forName("JDBCDriverClass");
※JDBC驱动的下载:
JDBC文件的导入:Eclipse-指定工程-构建路径(bulid path)-Java构建路径-添加外部JAR-应用;

(2)建立连接
Connection connection = DriverManager.getConnection("databaseURL");

MySql数据库要指定主机名,数据库名;
      Connection connection = DriverManger.getConnection("jdbc:mysql://localhost/bookrama","username","password");
Oracle数据库要指定主机名,数据库监听输入连接请求的端口号,定位数据库的数据库名;
      Connection connection = DriverManger.getConnection("jdbc:oracle:thin:@liang.armstrong.edu:1521:orcl","username","password");
Access数据库要先在Windows下的ODBC数据管理器创建一各ODBC数据源,在创建Connection对象:
      Connection connection = DriverManager.getConnection("jdbc:odbc:ExampleMDBDSource");

(3)创建语句
Statement statement = connection.createStatement();
Connection对象是Java程序与数据库的连接通道,Statement对象时通道上的信息交换器;

(4)执行语句
执行更新操作: ResultSet resultSet = statement.executeUpdate("QueryString");
执行查询操作: ResultSet resultSet = statement.executeQuery("QueryString");

(5)处理ResultSet
while(resultSet.next()){
     String data1 = resultSet.getString(1);
     int data2 = resultSet.getInt(2); 
     float data3 = resultSet.getFloat(3);
}
//假定数据表有三个字段data1、data2、data3,使用ResultSet相应的getX(index)方法获取,index从1开始;
可以使用 ResultSetMete获取数据表的列行信息,详见37.3;
可以使用 DatabaseMetaData获取数据库的相关信息,详见37.3;

(6)关闭连接
connection.close();

示例代码:
[java]  view plain  copy
  1. public static void main(String[] args) throws SQLException ,ClassNotFoundException{  
  2. Class. forName("com.mysql.jdbc.Driver");  
  3. Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/bookrama","root","root");  
  4. Statement statement = connection .createStatement();    
  5. ResultSet resultSet = statement .executeQuery("select isbn,author,title,price from books" );   
  6. while(resultSet .next()){  
  7.    String isbn = resultSet .getString(1);  
  8.    String author = resultSet.getString(2);  
  9.    String title = resultSet.getString(3);  
  10.    float price =  resultSet .getFloat(4);  
  11.    System. out.println(isbn +"\t"+ author +"\t" +title + "\t"+price );  
  12. }  
  13. connection.close();  





3、 PreparedStatement 预编译SQL语句
[java]  view plain  copy
  1. Class.forName("JDBCDriverClass");  
  2. Connection connection = DriverManager.getConnection("databaseURL");  
  3.   
  4. PreparedStatement statement = connection.prepareStatement("select id form books where name=? and year>=?");  
  5. statement.setString(1,"Alassad");  
  6. statement.setInt(2,20);  
  7. ResultSet result = statement.executeQuery();  
  8. //使用?代替待编译的变量,使用Statement的setX(index,X value)设置变量;  


4、 CallableStatement 调用记载储存在SQL中的进程和方法;
[java]  view plain  copy
  1. //假设 function functionName(firstname varchar2,lastname verchar2);返回与firstname、lastname都匹配的记录个数;  
  2.   
  3. Class.forName("JDBCDriverClass");  
  4. Connection connection = DriverManager.getConnection("databaseURL");  
  5.   
  6. //调用SQL进程  
  7. CallableStatement statment = connection.prepareCall("{call sampleProcedure(?,?)}");  
  8. //调用SQL方法  
  9. CallableStatement statment = connection.prepareCall("{?=call functionName(?,?)}");  
  10. statement.setString(2,firstaname);      //传递参数  
  11. statement.setString(3,lastname);  
  12. statement.registerOutParameter(1,Types.INTEGER);       //注册返回参数  
  13. statement.execute();  
  14. int result = statement.getInt(1);  





获取元数据

1、获取数据库相关信息 DatabaseMetaData
[java]  view plain  copy
  1. Class.forName("JDBCDriverClass");  
  2. Connection connection = DriverManager.getConnection("databaseURL");  
  3.   
  4. DatabaseMetaData dbMetaData = connection.getMetaData();  
  5. String str =dbMetaData.getURL();  
  6. dbMetaData.getUserName();  
  7. dbMetaData.getDataProductName();  
  8. dbMetaData.getDriverName();/  
  9. //DatabaseMetaData可获取的字段列表详见Java技术文档;  


2、结果集元数据 ResultSetMetaData
[java]  view plain  copy
  1. Statement statment = connection.createStatament();  
  2. ResultSet resultSet = statement.executeQuery("queryString");  
  3. ResultSetMetaData rsMetaData= connection.getMetaData();  
  4.   
  5. for(int i=1;i<rsMetaData .getColumnCount();i++ )  
  6.      System.out.printf("%-12s\t",rsMetaData .getColumnName(i));  
  7.   
  8. while(resultSet.next()){  
  9.      for(int i=1;i<rsMetaData.getColumnCount();i++)  
  10.           System.out.printf("%-12s\t",resultSet.getObject(i));  
  11. }   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值