惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

大猫的无限游戏
大猫的无限游戏
Webroot Blog
Webroot Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
T
Threat Research - Cisco Blogs
V2EX - 技术
V2EX - 技术
L
LINUX DO - 热门话题
Google DeepMind News
Google DeepMind News
Recorded Future
Recorded Future
S
Schneier on Security
I
InfoQ
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The GitHub Blog
The GitHub Blog
S
Security @ Cisco Blogs
O
OpenAI News
W
WeLiveSecurity
Vercel News
Vercel News
阮一峰的网络日志
阮一峰的网络日志
Simon Willison's Weblog
Simon Willison's Weblog
人人都是产品经理
人人都是产品经理
Cloudbric
Cloudbric
The Last Watchdog
The Last Watchdog
The Hacker News
The Hacker News
Google Online Security Blog
Google Online Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
GbyAI
GbyAI
NISL@THU
NISL@THU
T
Tailwind CSS Blog
V
Visual Studio Blog
PCI Perspectives
PCI Perspectives
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
D
DataBreaches.Net
B
Blog RSS Feed
N
News and Events Feed by Topic
N
News and Events Feed by Topic
H
Heimdal Security Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
腾讯CDC
Latest news
Latest news
V
Vulnerabilities – Threatpost
Hacker News: Ask HN
Hacker News: Ask HN
WordPress大学
WordPress大学
V
V2EX
aimingoo的专栏
aimingoo的专栏
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Register - Security
The Register - Security
Help Net Security
Help Net Security

博客园 - wasd

pear安装步骤 linux定时任务的设置 C语言字符串拆分,打开关闭文件 - wasd - 博客园 js-tips 用optgroup 禁用select中的option方法 - wasd - 博客园 DB2常用语句记录 addslashes、get_magic_quotes_gpc函数、stripslashes函数(转来记录一下) - wasd - 博客园 Linux 强制卸载软件 - wasd - 博客园 Setup locally visual host - wasd B:X星球的身份证系统 B:有道搜索框 B:有道饭团 A:另类的异或 C:Sibonacci - wasd - 博客园 CakePHP支持DB2 PHP 的变量 - wasd - 博客园 DB2 SQLSTATE 消息异常 并行计算简介 PB3编译adobe的例子photoviewer时错误处理
JDBC中Preparedstatement使用小结 及JDBC插入数据后获得Last insert ID
wasd · 2009-05-19 · via 博客园 - wasd

编写SQL语句, 尤其是要插入多个Filed时, 是一件非常BT的事情, 至少让我很不爽, 使用preparedstatement可以使代码变得更优雅一些, 虽然会有些长, 但会更条理, 而且preparedstatement更高于SQL语句 - 相对来说不太容易随着数据库版本改变而变动. 另外preparedstatement效率更高, 安全性更好

下面是恐怖的SQL:

        Statement statement = (Statement) conn.createStatement();
        String sql 
= "INSERT INTO `DEP`.`employee` " +
                
"( `name` , `age` , `address` , `isMale` , `level` , `Department_ID` ) " +
                
"VALUES (" +
                
"'" + emp.getName() + "', " +
                emp.getAge() 
+ "" +
                JdbcUtilities.getSqlForString(emp.getAddress()) 
+ "" +
                emp.getIsMale() 
+ "" +
                emp.getLevel() 
+ "" +
                emp.getDepartment_ID() 
+ ");";

        log.debug(
"Executing sql :" + sql);
        statement.executeUpdate(sql);

        ResultSet rs 
= statement.executeQuery("SELECT last_insert_id();");// .execute("SELECT last_insert_id();");
        if (rs.next()) {
            System.out.println(rs.getInt(
"1"));
        }

这里是使用PreparedStatement后的语句:

Code2

插入一行

  1. 声明 PreparedStatement。

    PreparedStatement prepStmt;
  2. 将一条 SQL 语句指派给 PreparedStatement 对象。

    prepStmt = conn.prepareStatement(
        "INSERT INTO MyTable(MyColumn) values (?)");
  3. 为该语句指派输入参数值。

    以下代码显示一个字符串参数。

    String newValue;
        // assign value
        prepStmt.setStringParameter(1, newValue);
  4. 执行该语句。

    返回值表示受该语句影响的行数。

    long rowsInserted = prepStmt.executeStatement();
  5. 如果禁用了 [自动提交],请提交更改。

    conn.commit();

更新一行

  1. 声明 PreparedStatement。

    PreparedStatement prepStmt;
  2. 将一条语句指派给 PreparedStatement 对象。

    prepStmt = conn.prepareStatement(
        "UPDATE MyTable SET MyColumn1 = ? WHERE MyColumn2 = ?");
  3. 为该语句指派输入参数值。

    String newValue;
        String oldValue;
        // assign values
        prepStmt.setStringParameter( 1, newValue );
        prepStmt.setStringParameter( 2, oldValue );
  4. 执行该语句。

    long rowsUpdated = prepStmt.executeStatement();
  5. 如果禁用了 [自动提交],请提交更改。

    conn.commit();

删除一行

  1. 声明 PreparedStatement。

    PreparedStatement prepStmt;
  2. 将一条语句指派给 PreparedStatement 对象。

    prepStmt = conn.prepareStatement(
        "DELETE FROM MyTable WHERE MyColumn = ?");
  3. 为该语句指派输入参数值。

    String deleteValue;
        prepStmt.setStringParameter(1, deleteValue);
  4. 执行该语句。

    long rowsDeleted = prepStmt.executeStatement();
  5. 如果禁用了 [自动提交],请提交更改。

    conn.commit();
 
转自:http://liguoliang.com/2009/02/773/
http://www.ianywhere.com/developer/product_manuals/sqlanywhere/0902/zh/html/uljvzh9/00000034.htm