完成数据库的连接,就马上要对数据库进行增删改查操作了;先来了解一下Statement

通过JDBC插入数据 (这里提供一个查找和插入方法)

Statement:用于执行sql语句的对象;
*1.通过Connection 的creatStatement()方法来获取;
*2.通过executeUpdate(sql) 可以执行SQL语句
*3.传入的SQL可以是insert update delete,但是不能是select;
* 注意:在使用后要关闭connection和statement(在finally中关闭)
* 关闭的顺序:先关statement ; 后关 connection

@Test
public void testStatement()throws Exception{
//1.获取数据库连接
Connection conn = null;
Statement st = null;
try {
conn = getConnection();//参看最底下的附录(获取连接)
//2.准备插入的sql
String sql ="insert into contacts(name,address,phone)"+"value('xyz','abc','abc')";
//3.执行插入
//获取sql的statement对象:Connection的createStatement()方法来获取
st = conn.createStatement();
//调用statement对象的executeUpdate(sql)对象,插入sql语句
st.executeUpdate(sql);
} catch (Exception e) {
e.printStackTrace();
}finally{
try{
if(st !=null)
//关闭Statement 对象
st.close();
}catch (Exception e) {
e.printStackTrace();
}finally{
//关闭连接
if(conn !=null)
conn.close();
}

}

}

/**
* ResultSet:结果集,封装了使用JDBC进行查询的接口
* 1.调用Statement 对象的executeQuesry(sql)可以得到结果集
* 2.返回一张数据表,有指针指向数据表的第一行的前面
* 3.可以调用next方法检测下一行是否有效,若有效返回true且指针下移
* 4.当指针对到一行时,可以通过getxxxx(index)或者getxxx(cloumName);
* 获取每一列的值:getInt(1),getString("name")
* @throws Exception
*/
@Test
public void testResultSet() throws Exception{
//获取Id=19的记录值,并且每条打印
Connection con = null;
ResultSet rs = null;
Statement st = null;
try {
//1.获取connection
con = JdbcTools.getConnection();//JdbcTools.getConnection()同附录的方法
//2.获取Statement
st = con.createStatement();
//3.准备sql
String sql = "select * from contacts where id=19";
//4.获取ResultSet
rs = st.executeQuery(sql);
//5.处理ResultSet
if(rs.next()){//如果是多条记录,把if改成while
int id = rs.getInt(1);//第一列
String name = rs.getString("name");
String address = rs.getString(3);
System.out.println(id);
System.out.println(name);
System.out.println(address);
}
//6.关闭
} catch (Exception e) {
e.printStackTrace();
}finally{
JdbcTools.release(rs, st, con);//方法见附录
}
}

//以上提供了插入和查询方法

*********************************************************************************************************************

这里我们在来了解一个PreparedStatement方法,可以对比Stetement

/**
* PreparedStatement是Stetement的子接口;
*preparedStatement:使用statement,sql需要拼接;
*PerparedStatement:String sql="insert into contacts(name,address,phone) value(?,?,?)"
*Statement:String sql = "insert into contacts(name,address,phone)"+"value('nn'+'121'+'1212')";
*1.创建preparedStatement:
*2.调动PreparedStatement的setxxx(int index,object value),设置占位符的值
*这里index从1开始
*3.执行sql语句:executeQuery()或者executeUpdate(),前者是查询,后者是更新
*注意,执行时不再需要闯入sql语句
*
*好处:1防止SQl注入,即防止拼接过程中有加入其它东西,例如有OR···,这样,sql就可以正确执行;2提高性能;3····
*
* @throws Exception
*/
@Test
public void testPreparedStatement() throws Exception {
Connection con = null;
PreparedStatement p = null;
ResultSet rs = null;
try {
con = JdbcTools.getConnection();
String sql = " insert into contacts(name,address,phone)values(?,?,?)";
p = con.prepareStatement(sql);
p.setString(1, "tom");
p.setString(2, "zhejiang");
p.setString(3, "15988324290");
p.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally{
JdbcTools.releaseDB(rs, p, con);
}

}

附上

public Connection getConnection() throws Exception{
String driverClass = null;
String jdbcUrl = null;
String user = null;
String password = null;

//读取类路径下的properties
InputStream in = getClass().getClassLoader().getResourceAsStream("jdbc.properties");
Properties p = new Properties();
p.load(in);
driverClass=p.getProperty("driver");
jdbcUrl = p.getProperty("jdbcUrl");
user = p.getProperty("user");
password = p.getProperty("password");

Driver driver = (Driver) Class.forName(driverClass).newInstance();//实例化
Properties info = new Properties();
info.put("user",user);
info.put("password",password);
Connection connection = driver.connect(jdbcUrl, info);
return connection;
}

public static void release(ResultSet rs, Statement statement ,Connection con) throws Exception{

if(rs != null){

try {

rs.close();

} catch (Exception e2) {

e2.printStackTrace();

}

}

if(statement !=null){

try {

statement.close();

} catch (Exception e2) {

e2.printStackTrace();

}

}

if(con!=null){

try {

con.close();

} catch (Exception e2) {

e2.printStackTrace();

}

}

}

public static void releaseDB(ResultSet rs, PreparedStatement statement ,Connection con) throws Exception{

if(rs != null){

try {

rs.close();

} catch (Exception e2) {

e2.printStackTrace();

}

}

if(statement !=null){

try {

statement.close();

} catch (Exception e2) {

e2.printStackTrace();

}

}

if(con!=null){

try {

con.close();

} catch (Exception e2) {

e2.printStackTrace();

}

}

}

需要导入的包

mysql-connector-java-5.1.34.jar

jdbc 数据的增删改查的Statement Resultset PreparedStatement的更多相关文章

  1. MVC模式:实现数据库中数据的增删改查功能

    *.数据库连接池c3p0,连接mysql数据库: *.Jquery使用,删除时跳出框,确定是否要删除: *.使用EL和JSTL,简化在jsp页面中插入的java语言 1.连接数据库 (1)导入连接数据 ...

  2. Mybatis框架基于注解的方式,实对数据现增删改查

    编写Mybatis代码,与spring不一样,不需要导入插件,只需导入架包即可: 在lib下 导入mybatis架包:mybatis-3.1.1.jarmysql驱动架包:mysql-connecto ...

  3. dbutils中实现数据的增删改查的方法,反射常用的方法,绝对路径的写法(杂记)

    jsp的三个指令为:page,include,taglib... 建立一个jsp文件,建立起绝对路径,使用时,其他jsp文件导入即可 导入方法:<%@ include file="/c ...

  4. Mybatis实现数据的增删改查

    Mybatis实现数据的增删改查 1.项目结构(使用maven创建项目) 2.App.java package com.GetcharZp.MyBatisStudy; import java.io.I ...

  5. Hibernate3回顾-5-简单介绍Hibernate session对数据的增删改查

    5. Hibernate对数据的增删改查 5.1Hibernate加载数据 两种:get().load() 一. Session.get(Class arg0, Serializable arg1)方 ...

  6. Mybatis学习总结(二)—使用接口实现数据的增删改查

    在这一篇中,让我们使用接口来实现一个用户数据的增删改查. 完成后的项目结构如下图所示: 在这里,person代表了一个用户的实体类.在该类中,描述了相关的信息,包括id.name.age.id_num ...

  7. mvc模式jsp+servel+jdbc oracle基本增删改查demo

    mvc模式jsp+servel+jdbc oracle基本增删改查demo 下载地址

  8. 数据的增删改查(三层)<!--待补充-->

    进行数据操作必然少了对数据的增删改查,用代码生成器生成的代码不是那么满意!方便在今后使用,这里就主要写“数据访问层(Dal)” 既然这里提到三层架构:有必要将三层内容在这里详细介绍一下(待补充) 注: ...

  9. vue实现对表格数据的增删改查

    在管理员的一些后台页面里,个人中心里的数据列表里,都会有对这些数据进行增删改查的操作.比如在管理员后台的用户列表里,我们可以录入新用户的信息,也可以对既有的用户信息进行修改.在vue中,我们更应该专注 ...

随机推荐

  1. 12 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例

    EL应用      自定义一个标签,实现两个字符串的相加 1回顾      1.1servlet生命周期           init(ServletConfig)           service ...

  2. 转-临界区对象TCriticalSection与TRTLCriticalSection的区别

    TRTLCriticalSection是一个结构体,在windows单元中定义: 是InitializeCriticalSection, EnterCriticalSection, LeaveCrit ...

  3. NOIP200806 火柴棒等式【B005】

    [B005]火柴棒等式[难度B]———————————————————————————————————————————————————————————— [题目要求] 给你n根火柴棍,你可以拼出多少个 ...

  4. 2016 Multi-University Training Contest 2

    8/13 2016 Multi-University Training Contest 2官方题解 数学 A Acperience(CYD)题意: 给定一个向量,求他减去一个  α(>=0)乘以 ...

  5. [Python学习] python 科学计算库NumPy—tile函数

    在学习knn分类算法的过程中用到了tile函数,有诸多的不理解,记录下来此函数的用法.   函数原型:numpy.tile(A,reps) #简单理解是此函数将A进行重复输出 其中A和reps都是ar ...

  6. [BZOJ3874][AHOI2014] 宅男计划

    Description 外卖店一共有N种食物,分别有1到N编号.第i种食物有固定的价钱Pi和保质期Si.第i种食物会在Si天后过期.JYY是不会吃过期食物的.比如JYY如果今天点了一份保质期为1天的食 ...

  7. PHP文件上传

    前台页代码: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> </h ...

  8. Python In Action:三、稍稍扩展

    #!/usr/bin/env python """Spare.py is a starting point for simple wxPython programs.&q ...

  9. linux内核分析作业:操作系统是如何工作的进行:完成一个简单的时间片轮转多道程序内核代码

    计算机如何工作 三个法宝:存储程序计算机.函数调用堆栈.中断机制. 堆栈 函数调用框架 传递参数 保存返回地址 提供局部变量空间 堆栈相关的寄存器 Esp 堆栈指针  (stack pointer) ...

  10. hihoCoder 1183 连通性一·割边与割点(Tarjan求割点与割边)

    #1183 : 连通性一·割边与割点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 还记得上次小Hi和小Ho学校被黑客攻击的事情么,那一次攻击最后造成了学校网络数据的丢 ...