-
Notifications
You must be signed in to change notification settings - Fork 1
DemoSQLKit
kernelforce edited this page Jan 3, 2013
·
4 revisions
SQLKit类是对Connection、Statement等的封装。
假如有如下的表格
CREATE TABLE `table` (
`id` int(10) unsigned NOT NULL auto_increment,
`text` text NOT NULL,
PRIMARY KEY (`id`)
);
一个最简单的范例
package org.kernelab.basis.demo;
import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List;
import org.kernelab.basis.sql.DataBase; import org.kernelab.basis.sql.DataBase.MySQL; import org.kernelab.basis.sql.SQLKit;
/** * * @author Dilly King * */ public class DemoSQLKit { /** * @param args */ public static void main(String[] args) { String serverName = "localhost"; String userName = "root"; String passWord = "root"; String catalog = "test"; // 数据库名称为test DataBase database = new MySQL(serverName, catalog, userName, passWord);
// 准备工作 SQLKit kit = database.getSQLKit(); // 从DataBase获取kit ResultSet rs = null; String sql = null;
try { // 执行查询 sql = "SELECT * FROM `table` WHERE `id`<10"; rs = kit.query(sql); while (rs.next()) { // 在这里遍历每一条记录 }
} catch (SQLException e) { e.printStackTrace(); } finally { kit.close(); // !!必需在finally这里关闭kit // 在关闭后,需要重新通过database.getSQLKit()来获取新的kit } } }
下面的代码省去了try-catch部分
sql = "SELECT * FROM `table` WHERE `id`<?"; rs = kit.query(sql, 10); // 这里的10就是把10这个值填充到上面语句中的?位置
// 执行修改 sql = "UPDATE `table` SET `text`=? WHERE `id`=?"; kit.update(sql, "hey!", 10);
// 用List<Object>作为参数列表 sql = "INSERT INTO `table` (`id`,`text`) VALUES (?,?)"; List<Object> param = new ArrayList<Object>(); param.add(SQLKit.NULL); // 用SQLKit.NULL来表示SQL语句中的null param.add("你好"); kit.update(sql, param);
ResultSet rs = kit.getStatement().getGeneratedKeys(); while (rs.next()) { Tools.debug(rs.getInt(1)); // 如果id是自增的,那么在此处可以获取id在INSERT后自增的数值 }
// 批量执行操作 kit.setAutoCommit(false); kit.clearBatch(); kit.prepareStatement(sql); for (int i = 0; i < 10; i++) { kit.addBatch(SQLKit.NULL, String.valueOf(i)); } kit.executeBatch(); kit.commit(); // 提交批量操作
上述的使用方式中通过在SQL中植入?作为参数的占位符,再通过参数列表进行一对一的位置填充。除了这样的方法外,SQLKit还支持在SQL中植入参数名来指定填充某些参数。
// 在SQL语句中嵌入参数名 sql = "SELECT * FROM `table` WHERE `id`>?i? AND `text`<?tx?";
// 在Map<String,Object>对象中指定参数 Map<String, Object> data = new HashMap<String, Object>(); data.put("i", 5); data.put("tx", "8");
// 以data作为参数查询,将其中的i与tx值填充至SQL中的相应位置 rs = kit.query(sql, data); while (rs.next()) { // 在这里遍历每一条记录 }