JDBC 连接mysql, oracle, sqlservice数据库操作步骤

1加载合适的JDBC驱动程序

Class.forName(Driver);


   MySQL驱动程序:com.mysql.jdbc.Driver              

URL = jdbc:mysql://localhost:3306/GUESTBOOK?useUnicode=true&characterEncoding=UTF-8

 

   Oracle驱动程序:oracle.jdbc.driver.OracleDriver   

URL = jdbc:oracle:thin:@localhost:1521:student

 

   SQLServer驱动程序:

   com.Microsoft.jdbc.sqlserver.SQLServerDriver     

URL = jdbc:sqlserver://localhost:1433;DatabaseName=day15



2、建立数据库连接

MySQL数据库连接的方法:

Connection con=DriverManager.getConnection(jdbc:mysql://主机IP或主机名:3306/数据库名”,用户名,密码);


java.sql.DriveManager  用来处理装载驱动程序并且为创建新的数据库连接提供支持;

 

java.sql.Connection  用于完成对特定定数据库的连接;

 

java.sql.Statement  用于对特定的数据库执行SQL语句;java.sql.Statement又包含了以下两个重要的子类型:


       java.sql.PreparedStatement  用于执行预编译的SQL语句;

 

       java.sql.CallableStatement  用于执行数据库中存储的过程的调用

用:

--java.sql.ResultSet  用于保存查询所得的结果集

3、创建Statement对象

Statement  st=con.createStatement();  //最后可以不关闭,但推荐关闭

 

利用Statement对象可以执行静态SQL语句,静态SQL语句可以是Select语句、Delete语句、Update语句和Insert语句

执行SQL语句

 

Statement接口提供了三种执行SQL语句的方法:executeQuery()executeUpdate() execute()。具体使用哪一个方法由SQL语句本身来决定。

 

方法 executeQuery 用于产生单个结果集的语句,例如 SELECT 语句等。

 

方法 executeUpdate 用于执行INSERTUPDATEDELETE 语句以及SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLEINSERTUPDATE DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个 整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。

 

方法 execute 用于执行返回多个结果集、多个更新计数或二者组合的语句。一般不会需要该高级功能。

 

      ①JDBC在编译时并不对将要执行的SQL查询语句作任何检查,只是将其作为一个String类对象,直到驱动程序执行SQL查询语句时才知道其是否正确。对于错误的SQL查询语句,在执行时将会产生SQLException

 

      ②一个Statement对象在同一时间只能打开一个结果集,对第二个结果集的打开隐含着对第一个结果集的关闭。

 

      ③如果想对多个结果集同时操作,必须创建出多个Statement对象,在每个Statement对象上执行SQL查询语句以获得相应的结果集。

 

      ④如果不需要同时处理多个结果集,则可以在一个Statement对象上顺序执行多个SQL查询语句,对获得的结果集进行顺序操作。


str="insertinto customer values('wangyang',24,'beijing','wangyang@sina.com')";

 

int  recordNumber=st.executeUpdate(str);执行executeUpdate()方法返回该SQL语句涉及的记录数。


str="select* from mycustomer";   //查询表中记录

 

ResultSet rs=st.executeQuery(str); 由于SQL语句是select,用executeQuery()方法,返回一个结果集保存在ResultSet对象rs中。

 

4、分析ResultSet对象


① 执行完毕SQL语句后,将返回一个ResultSet类的对象,它包含所有的查询结果。但对ResultSet类的对象方式依赖于光标(Cursor)的 类型,而对每一行中的各个列,可以按任何顺序进行处理(当然,如果按从左到右的顺序对各列进行处理可以获得较高的执行效率);


ResultSet类中的Course方式主要有:

 

ResultSet.TYPE_FORWARD_ONLY(为缺省设置):光标只能前进不能后退,也就是只能从第一个一直移动到最后一个。


ResultSet.TYPE_SCROLL_SENSITIVE:允许光标前进或后退并感应到其它ResultSet的光标的移动情形。

 

ResultSet.TYPE_SCROLL_INSENSITIVE:允许光标前进或后退并不能感应到其它ResultSet的光标的移动情形。


ResultSet类中的数据是否允许修改主要有:

 

ResultSet.CONCUR_READ_ONLY(为缺省设置):表示数据只能只读,不能更改。


ResultSet.CONCUR_UPDATABLE:表示数据允许被修改。

 

可以在创建StatementPreparedStatement对象时指定ResultSet的这两个特性。


Statement stmt=con.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);

 

 

PreparedStatement pstmt=con.PrepareStatement("insert into bookTable values (?,?,?)",ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

 

② ResultSet类的对象维持一个指向当前行的指针,利用ResultSet类的next()方法可以移动到下一行(在JDBC中,Java程序一次只 能看到一行数据),如果next()的返回值为false,则说明已到记录集的尾部。另外JDBC也没有类似ODBC 的书签功能的方法。

 

③ 利用ResultSet类的getXXX()方法可以获得某一列的结果,其中XXX代表JDBC中的Java数据类型,如 getInt()getString()getDate()等。访问时需要指定要检索的列(可以采用 int值作为列号(从1开始计数)或指定列(字段)名方式,但字段名不区别字母的大小写)。

 

示例:


while(rs.next()){

 

int id=rs.getInt("id");

 

String name=rs.getString("cName");


int age=rs.getInt("cAge");

 

String address=rs.getString("cAddress");


String email=rs.getString("cEmail");


System.out.println(id+" "+name+" "+age+" "+address+" "+email);

 

}

获得结果集中的结构信息:利用ResultSet类的getMetaData()方法来获得结果集中的一些结构信息(主要提供用来描述列的数量、列的名称、列的数据类型。利用ResulSetMetaData类中的方法)。

 

ResultsetMetaData  rsmd=rs.getMetaData();

rsmd.getColumnCount();   //返回结果集中的列数

rsmd.getColumnLabel(1); //返回第一列的列名(字段名)

 

例如:


Statement stmt=con.createStatement();


ResultSet rs=stmt.executeQuery("select * from TableName");


for(int i=1; i<=rs.getMetaData().getColumnCount(); i++) //跟踪显示各个列的名称


{ System.out.print(rs. getColumnName (i)+"\t");

}

while(rs.next())


{ //跟踪显示各个列的值

 

for(int j=1; j<=rs.getMetaData().getColumnCount(); j++)


{ System.out.print(rs.getObject(j)+"\t"); 

}

}

5、关闭连接

(注意关闭的顺序) 

例:

rs.close();

st.close();

con.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值