JDBC编程入门

一、简介

JDBC:java database connectivity。是SUN公司制订的一套操作数据库的规范。不同的数据库厂商虽然数据库驱动各不相同,但都保证了各自的驱动是遵循了JDBC规范的。

SUN公司制作的规范都在java.sql.*javax.sql.*包中。

二、入门级的编写步骤

注册驱动 --> 获得连接 --> 获得发送sql语句对象 --> 执行 -->  关闭资源

1. 注册驱动 class.forName(...)

2. 获取连接 DriveManager.getConnection(...) 

Jdbc:mysql://localhost:3306/cartitem   root  chen

3. 获取代表SQL语句对象 Statement stmt = conn.createStatement()

4. 执行SQL语句 stmt.executeQuery(sql)返回ReusltSet rs对象

5. 遍历结果 rs.next()  使用相关的rs.getString() rs.getInt()

6. 关闭资源  rs.close()  stmt.close()  conn.close()

三、Statement 对象常用方法

executeQuery(String sql)、executeUpdate(String sql)、execute(String sql)、addBatch(String sql)、executeBatch()clearBatch()

四、ResultSet对象常用方法  封装了结果集

next():移动到下一行  previous():移动到前一行

absolute(int row):移动到指定行

beforeFirst():移动resultSet的最前面。

afterLast() :移动到resultSet的最后面。

五、SQL注入问题与解决方法 、insert into获取自增主键及PreparedStatement

<input name=”username” ../>

若有类似select username,birthday.. From users where username = ‘?’

若这里的?问题被人输入了’ or ‘1’=’1  这样的就称为SQL注入了。

解决方法,要用PreparedStatement,有以下好处:

a、是Statement的子接口 b、防止SQL注入

c、使用占位符?替代用户输入的参数 d、支持SQL语句预编译,执行效率高

String sql = "insert into tablename (id,name,age) value(?,?,?)";

PreparedStatement stmt = conn.prepareStatement(sql); //预编译

stmt.setInt(1,123);

还可以

ResultSet rs = stmt.getGeneratedKeys(),然后和

rs.getInt 获取刚自增的主键。

除了以上可以支持占位预编译的方式外,还可以支持批量操作相关的方法如下:

addBatch()executeBatch()clearBatch()如下示例代码:

conn = JdbcUtil.getConnection();

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

stmt = conn.prepareStatement(sql);

for(int i=1;i<=1000001;i++){

stmt.setInt(1, i);

stmt.setString(2, "aaa"+i);

stmt.addBatch();

if(i%1000==0){

stmt.executeBatch();

stmt.clearBatch();

}

}

六、调用存储过程                                       

CallableStatement专门用于调用存储过程的接口

delimiter $$

CREATE PROCEDURE demoSp(IN inputParam VARCHAR(255), INOUT inOutParam varchar(255))

BEGIN

    SELECT CONCAT('FANZHANJIANG Love ', inputParam) into inOutParam;

END $$

delimiter ;

-------------------------java调用存储过程--------------

Connection conn = JdbcUtil.getConnection();

String sql = "{call demoSp(?,?)}";    //调用存储过程 demoSp(存储过程)

CallableStatement stmt = conn.prepareCall(sql);

stmt.setString(1, "QingNai");//输入的参数:设置参数

stmt.registerOutParameter(2, Types.VARCHAR);  //注册输出参数类型

stmt.execute();

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值