Skip to content
kernelforce edited this page Jan 3, 2013 · 4 revisions

使用 SQLKit

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())
{
	// 在这里遍历每一条记录
}
Clone this wiki locally