JDBC的应用

JDBC的开发步骤:

1.  引入JDBC驱动架包

2.  程序中引入JDBC驱动类

3.  创建java与数据库的连接

4.  跟数据库交互:发送sql语句,接收数据库对sql语句的执行结果

5.  解析执行结果

先写入执行代码,快捷键shift+alt+z,写出try与catch代码块

使用到的相关接口;

Connection接口

DriverManager接口

Statement接口

ResultSet接口

程序引入驱动类:

Class.forName("com.mysql.jdbc.Driver");

创建java与数据库的连接:

Connection conn = DriverManager getConnection(url,username,password);

--------------------------------------------------------------------

原理:

public static Connection getConnection(String url,
                                       String user,
                                       String password)
                                throws SQLException
试图建立到给定数据库 URL 的连接。DriverManager 试图从已注册的 JDBC 驱动程序集中选择一个适当的驱动程序。
参数:
url - jdbc:subprotocol:subname 形式的数据库 url
user - 数据库用户,连接是为该用户建立的
password - 用户的密码
返回:
到 URL 的连接
抛出:
SQLException - 如果发生数据库访问错误
Connection接口不能够自己new对象,DriverManager中有getConnection可以创建对象

----------------------------------------------------------------------------------------------------------------------------------------

 跟数据库交互:发送sql语句,接收数据库对sql语句的执行结果:

Statement 接口,用于执行静态 SQL 语句并返回它所生成结果的对象。

Statement stmt=conn.createStatement();                          //创建Statement对象

String sql="select*from tb_book";

ResultSet rs=stmt.executeQuery(sql);             //Statement执行静态sql语句并返回结果,结果使用ResultSet类型来接收

API:

createStatement

Statement createStatement()
                          throws SQLException
创建一个 Statement 对象来将 SQL 语句发送到数据库。不带参数的 SQL 语句通常使用 Statement 对象执行。如果多次执行相同的 SQL 语句,使用 PreparedStatement 对象可能更有效。

使用返回的 Statement 对象创建的结果集在默认情况下类型为 TYPE_FORWARD_ONLY,并带有 CONCUR_READ_ONLY 并发级别。已创建结果集的可保存性可调用 getHoldability() 确定。

返回:
一个新的默认 Statement 对象
抛出:
SQLException
- 如果发生数据库访问错误,或者在关闭的连接上调用此方法

----------------------------------------------------------------------------------------------------------------------------------------

ResultSet接口:

1.表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。

2.ResultSet 对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。next 方法将光标移动到下一行;因为该方法在 ResultSet 对象没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。

查找数据表代码:

try {

Class.forName("com.mysql.jdbc.Driver");

String url= "jdbc:mysql://localhost:3306/test_1";

String username = "root";

String password = "Boyce";

Connection conn = DriverManager.getConnection(url, username, password);

String sql="select*from tb_books where name=? and author=?";

//            Statement statement= conn.createStatement();

PreparedStatement statement =conn.prepareStatement(sql);//通过Statement与数据库交互

statement.setInt(1, 33);                    //1代表sql语句中从左边数第一个问号,22代表sql语句中的name的值

statement.setString(2,"33");

//两个参数时,必须在同一行,因为要指出同一个数值

ResultSet rs = statement.executeQuery();    //执行静态SQL语句,并返回结果

//解析resultSet结果集,所接收的返回结果

//ResultSet 对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。next 方法将光标移动到下一行;

//因为该方法在 ResultSet 对象没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。

while(rs.next())

{

//                System.out.println(rs.getString(1));                      //括号中的数值代表某一类属性值,也可以说是一列数值

System.out.println(rs.getString("author"));

System.out.println(rs.getString(2));

}

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

----------------------------------------------------------------------------------------------------------------------------------------

JDBC插入数据表记录

Class.forName("com.mysql.jdbc.Driver");

String url= "jdbc:mysql://localhost:3306/test_1";

String username = "root";

String password = "Boyce";

Connection conn = DriverManager.getConnection(url, username, password);

String sql ="insert into tb_books values(?,?,?,?)";

PreparedStatement statement =conn.prepareStatement(sql);//通过Statement与数据库交互    多个参数

statement.setString(1,"cyuyan");

statement.setDouble(2, 100);

statement.setString(3, "20");

statement.setString(4, "lijianwei");

int rs = statement.executeUpdate();                 //是executeUpdate()而不是executeQuery()

if(rs!=0){                                                                //返回整数,如果re==1则插入成功,返回值为0则插入失败

System.out.println("插入成功");

}else

{

System.out.println("插入时报");

}

----------------------------------------------------------------------------------------------------------------------------------------

JDBC更新数据表记录

 

Class.forName("com.mysql.jdbc.Driver");

String url= "jdbc:mysql://localhost:3306/test_1";

String username = "root";

String password = "Boyce";

Connection conn = DriverManager.getConnection(url, username, password);

String sql = "update tb_books set name=?where author=‘lijianwei‘";   //问号设置为math  根据author为lijianwei去查找,若author是String类型则注意要加上单引号

PreparedStatement statement =conn.prepareStatement(sql);//通过Statement与数据库交互    多个参数

statement.setString(1,"cyuyan");

int rs = statement.executeUpdate();

if(rs!=0){

System.out.println("插入成功");

}else

{

System.out.println("插入时报");

}

----------------------------------------------------------------------------------------------------------------------------------------

JDBC批量插入:

public class JDBCTest1 {

private  static String url= "jdbc:mysql://localhost:3306/test_1";

private  static String username = "root";

private  static String password = "Boyce";

/**

* 载入驱动类

*/

static{

try {

Class.forName("com.mysql.jdbc.Driver");

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

/**

* 获取连接对象

* @return

* @throws SQLException

*/

public static Connection getconection() throws SQLException{

return DriverManager.getConnection(url, username, password);

}

//释放资源

public static void free(Connection conn,Statement statement,ResultSet rs){

try {

if(rs!=null)

rs.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{                                            //不管rs是否关闭成功,都会执行finally块

try {

if(statement!=null)

statement.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

try {

if(conn!=null)

conn.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

}

public class JDBCTest2 {

/**

* 查询表记录

* @param sql

* @throws SQLException

*/

public void queryAll(String sql) throws SQLException{

Connection conn = JDBCTest1.getconection();            //不需要new对象调用,JAVA中同一个包内的方法可通过类名直接调用

Statement statement = conn.createStatement();

ResultSet rs = statement.executeQuery(sql);

//解析rs内容

while(rs.next())

{

System.out.println(rs.getString(1));                      //括号中的数值代表某一类属性值,也可以说是一列数值

System.out.println(rs.getString("author"));

System.out.println(rs.getString(2));

}

JDBCTest1.free(conn, statement, rs);

}

public void isertBatch() throws SQLException{

Connection conn = JDBCTest1.getconection();

conn.setAutoCommit(false);                          //不自动提交,因为如果有一个失败时,可以整体回滚

String sql ="insert into tb_books values(?,?,?,?)";

PreparedStatement statement = conn.prepareStatement(sql);

for(int i=1;i<5;i++)

{

statement.setString(1, "boyce"+i);

statement.setDouble(2, 100+i);

statement.setString(3, "i"+i);

statement.setString(4, "boyce");

statement.addBatch();

}

statement.executeBatch();                         //同一提交给数据库

conn.commit();                                    //注意提交事务

JDBCTest1.free(conn, statement, null);

System.out.println("批量插入成功");

}

}

public static void main(String[] args) throws SQLException {

JDBCTest2 test2= new JDBCTest2();

try {

test2.isertBatch();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

**注意:如果是sql是查询语句,返回的是结果集,使用ResultSet去接收,若sql是插入或更新数据返回的则是int类型

PreparedStatement可以带参数,也可以不带参数

时间: 2024-10-09 22:48:55

JDBC的应用的相关文章

jdbc的简单使用

1.加载驱动(mysql的驱动是com.mysql.jdbc.Driver,SqlServer的驱动是 com.microsoft.sqlserver.jdbc.SQLServerDriver) 2.加载数据库的连接(url, username,password) 3.编写sql语句(String sql="select * from grade  where gradeName = ?";) 4.遍历查询结果 [while (resultSet.next()) {   System.

商城项目整理(三)JDBC增删改查

商品表的增加,修改,删除,订单表的增加,确认,用户表的查看,日志表的增加,查看 商品表建表语句: 1 create table TEST.GOODS_TABLE 2 ( 3 gid NUMBER not null, 4 gname VARCHAR2(90), 5 gdetails CLOB, 6 gpicture VARCHAR2(100), 7 gprice NUMBER, 8 gleixing NUMBER, 9 gpinpai VARCHAR2(20) 10 ) 11 tablespace

jdbc驱动jar导入eclipse

在使用JDBC编程时需要连接数据库,导入JAR包是必须的,导入其它的jar包方法同样如此,导入的方法是 打开eclipse 1.右击要导入jar包的项目,点properties 2.左边选择java build path,右边选择libraries 3.选择add External jars 4.选择jar包的按照路径下的确定后就行了. Java连接MySQL的最新驱动包下载地址 http://www.mysql.com/downloads/connector/j 有两种方法导入jar包,第一种

JDBC

Java语言访问数据库的一种规范,是一套API JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库.比如建立数据库连接.执行SQL语句进行数据的存取操作. JDBC规范采用接口和实现分离的思想设计了Java数据库编程的框架.接口包含在java.sql及javax.sql包中,其中java.sql属于JavaSE,javax.sql属于JavaE

java链接MySQL数据库时使用com.mysql.jdbc.Connection的包会出红线问题

package com.swift; //这里导入的包是java.sql.Connection而不是com.mysql.jdbc.Connection import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class TestJDBC { public static void main(String[] args) { try { Class.forName(

Tomcat JDBC Pool使用说明

Maven依赖 <dependency>   <groupId>org.apache.tomcat</groupId>   <artifactId>tomcat-jdbc</artifactId>   <version>8.5.9</version> </dependency> 最新版本为9.0,推荐使用8.5.9稳定版 常用配置 连接池配置项很多,下面只列出了推荐配置,项目组可根据自身情况进行增减 <b

tomcat启动过程报the JDBC Driver has been forcibly unregistered问题的修复过程

最近两天在整理关于flume的总结文档,没有启动过tomcat.昨天晚上部署启动,发现报了如题的错误,全文如下: 严重: The web application [/oa-deploy] registered the JBDC driver [com.microsoft.sqlserver.jdbc.SQLServerDriver] but failed to unregister it when the web application was stopped. To prevent a mem

使用JDBC如何提高访问数据库的性能?

1. 使用数据连接池(Connection Pool), 避免使用DriverManager.getConnection. 2. 合理的配置数据连接池参数,设置数据连接池的初始大小,最大连接数,连接超时时间等. 3. 选择合适的事务等级,按照不同的数据库操作类型选择不同的事务等级. 4. 及时关闭Connection,不关闭的话会严重影响系统的性能,甚至造成系统罢工. 5. 优化Statement 1) 选择合适的Statement, 根据不同的数据库操作选择Statement, Prepare

回滚的意义---JDBC事务回滚探究

JDBC手动事务提交回滚的常见写法一直是rollback写在commit的catch之后: try{ conn.setAutoCommit(false); ps.executeUpdate(); ps.executeUpdate(); conn.commit(); }catch(Exception e){ conn.rollback(); } 但是,这种回滚是没有意义的: 一旦commit前出错, 就不提交了, 回滚无用 一旦commit了, 说明没错, 不用回滚 找到一篇和我观点相同的文章:

Hive JDBC——深入浅出学Hive

第一部分:搭建Hive JDBC开发环境 搭建:Steps ?新建工程hiveTest ?导入Hive依赖的包 ?Hive  命令行启动Thrift服务 ?hive --service hiveserver & 第二部分:基本操作对象的介绍 Connection ?说明:与Hive连接的Connection对象 ?Hive 的连接 ?jdbc:hive://IP:10000/default" ?获取Connection的方法 ?DriverManager.getConnection(&q