以前学习java数据库操作,学得那叫糊里糊涂,各种JDBC常用的类和接口根本是傻傻分不清啥是干嘛的。只是套着用用吧。

不过这次好歹清楚些了,呜呜,学习有阶段性,多次重复才有好效果,多么痛的领悟。

工程名字是瞎起的,本来想复习继承多态来着,(逃

然后再来说一下JDBC,JDBC是一种可用于执行SQL语句的Java API,是连接应用程序和数据库的纽带,可以为多种关系数据库提供统一访问,它由一组用java编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,简单地说,JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。

但大多数的书里面都会讲到JDBC-ODBC,然后就很懵逼,啥啊!

那么先说啥是ODBC吧。

开放数据库连接(Open Database Connectivity,ODBC)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。ODBC基于SQL,并把它作为访问数据库的标准。这个接口提供了最大限度的相互可操作性:一个应用程序可以通过一组通用的代码访问不同的数据库管理系统。一个软件开发者开发的客户/服务器应用程序不会被束定于某个特定的数据库之上。ODBC可以为不同的数据库提供相应的驱动程序。对于ASP程而言,ODBC数据源是ASP程序的ADO组件和数据库之间的接口。

由于微软的数据库不是用Java语言来编写的,但是我们需要用java语言连接微软的数据库,这样就要编写一个桥连接,使java语言编写的代码也可以操作数据库。也就是说:

JDBC是使用通过JAVA的数据库驱动直接和数据库相连,而JDBC-ODBC连接的是ODBC的数据源,真正与数据库建立连接的是ODBC。这下懂了吧。
不过我还在网页上看见另一句话,建议使用JDBC直接连接,同时最好使用连接池!

说的真对,这么多年用MYSQL,一直都是用了一个叫“mysql-connector-java-5.1.35-bin.jar”的jar包,也就是java的数据库驱动,还没有用过ODBC呢,SQL Server没怎么学过,orz。。。

贴代码:

1.连接数据库

要访问数据库,首先加载数据库的驱动程序,只需要在第一次访问数据库时家再一次,然后每次访问数据时创建一个Connection对象,接着执行操作数据库的SQL语句,最后完成数据库操作后销毁前面的Connection对象即可。

将连接数据库作为单独的一个方法,并以Connection对象作为返回值,遇到对数据库执行操作的程序时可以直接调用Conn类的getConnection方法获取连接,增加代码重用性。

 package DBManager;

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException; public class DBConn {
Connection conn;
public Connection getConnection(){//目的是为了获取与数据库的连接,在主方法中调用该方法。
//JDBC技术是一种执行SQL语句的javaAPI。
try {
Class.forName("com.mysql.jdbc.Driver");//java.lang包的静态方法来加载JDBC驱动程序。。加载失败异常ClassNotFoundException
System.out.println("db run success");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/littlet","root","1234");//通过访问数据库的URL获取数据库连接对象java.sql包中类DriveManager的静态方法。。连接失败异常SQLException
System.out.println("db connect success");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
//关闭Connection对象
public static void closeConnection(Connection conn){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//回滚
public static void rollbackConnection(Connection conn){
try {
conn.rollback();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

2.确定存储的类型,就是数据库中放的东西,就是我们处理的这个对象。

 package domain;

 public class Student {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} }

3.java数据库操作代码

 package DBManager;

 import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; import domain.Student; public class Select {
Connection con;
PreparedStatement sql;
ResultSet res;//ResultSet类的next()方法返回值就是boolean类型的数据,当游标移动到最后一行会返回false。
public void select(int id){
DBConn db=new DBConn();
con=db.getConnection();
try {
sql=con.prepareStatement("select * from stub where id=?");
sql.setInt(1,id);
res=sql.executeQuery();//执行预处理语句
while(res.next()){
String name=res.getString(2);
System.out.println(name);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
db.closeConnection(con);
} }
}

为什么执行SQL语句用的是PrepareStatement对象而不是Statement对象呢?有什么区别吗?

 sql=con.createStatement();有了Statement对象后,可以调用相应的方法实现对数据库的查询和修改

 res.sql.executeQery(select * from stub);//获取查询结果集使用“%”代替0个或多个字符,使用下划线“_”代替一个字符实现模糊查询。+"where name like'zhang%'"

 while(res.next()){

   int id=rew.getInt("id");

   String name=res.getString("name");

 }

向数据库发送一个SQL语句,数据库中的SQL解释器负责把SQL语句生成底层的内部命令,然后执行该命令,完成相关的数据库操作,但是不断地向数据库提交SQL语句,会增加DB中SQL解释器的负担,影响执行速度。对于JDBC,可以通过Connection对象的preparedStatement方法对SQL语句进行预处理。

复习java数据库操作的总结的更多相关文章

  1. Java数据库操作

    一.JDBC 1.JDBC Java数据库连接,用于Java程序中实现数据库操作功能,java.sql包中提供了执行SQL语句,访问各种数据库的方法,并为各种不同的数据库提供统一的操作接口及类. 2. ...

  2. Java数据库操作(MySQL与SQLserver)

    在java编程开发中,数据库的开发是重头戏. MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品: SQL Server是由Microsoft开发 ...

  3. Java 数据库操作

    目录 Java数据库组织架构 下载驱动包 连接数据库 连接数据库的三个步骤 连接数据库的高开销 Statement接口介绍 PreparedStatement类 使用PreparedStatement ...

  4. Java数据库操作(JDBC)

    JDBC Java数据库连接(Java DataBase Connectivity,JDBC)用于在Java程序中实现数据库操作功能,它提供了执行SQL语句.访问各种数据库的方法,并为各种不同的数据库 ...

  5. Java数据库操作类演示

    只在mysql上测试过,不知道算不算好使​1. [代码][Java]代码     package org.load.demo; import java.io.IOException;import ja ...

  6. Java 学习笔记(16)——Java数据库操作

    数据库操作是程序设计中十分重要的一个部分,Java内置JDBC来操作数据库 JDBC使用 JDBC--Java Database connecting Java数据库连接:本质上JDBC定义了操作数据 ...

  7. Java数据库操作学习

    JDBC是java和数据库的连接,是一种规范,提供java程序与数据库的连接接口,使用户不用在意具体的数据库.JDBC类型:类型1-JDBC-ODBC桥类型2-本地API驱动类型3-网络协议驱动类型4 ...

  8. java数据库操作:JDBC的操作

    1,JDBC注意操作类及接口: 数据库操作过程: 1)打开数据库服务 2)连接数据库:一般都要输入用户名,密码, 3)操作数据库:创建表:查询表,更新,记录. 4)关闭数据库. 1,DriverMan ...

  9. Java数据库操作大全

    1.提取单条记录 //import java.sql.*; Connection con=null; Statement stmt=null; ResultSet %%6=null; try { Cl ...

随机推荐

  1. httpd 2.2.15 添加流媒体模块

    项目中使用的一直都是 httpd  2.2.15  用于播放视频资源,近期有个新产品上线发现快进视频会出现卡顿情况,因此添加了流媒体模块.(怀疑是新产品中的播放器进行了更改) 原文:http://li ...

  2. 软件工程 part4 评价3作品

    作品1 抢答器 地址: https://modao.cc/app/ylGTXobcMU7ePNi6tY53gG4iraLl0md评价: 挺好玩,但是字体大小是个缺陷,简单大方. 作品2:连连看 软件工 ...

  3. LintCode-373.奇偶分割数组

    奇偶分割数组 分割一个整数数组,使得奇数在前偶数在后. 样例 给定 [1, 2, 3, 4],返回 [1, 3, 2, 4]. 挑战 在原数组中完成,不使用额外空间. 标签 数组 两根指针 code ...

  4. LoadRunner中执行命令行

    在LoadRunner可以使用函数system()来调用系统指令,结果同在批处理里执行一样,但是system()有个缺陷:无法获取命令的返回结果. 也许可以用`echo command > fi ...

  5. 修改QQ各版本的默认保存位置(聊天记录)

    这几天没少折腾windows,都有点烦了,我是那种有强迫症的,只要知道的自己没有做到的会感觉到浑身不爽的因为系统重装了好几次,QQ也没少安装几次,我使用的是TM的QQ(没有 那么多烦人的广告,娱乐组件 ...

  6. leetcode 整理

    1.Two Sum 构造Comparator,KSum 这一类的问题最基本的一题, 解法: 先sort,然后双指针,头尾各一个.进行加逼找值. 对于其余的KSum最终是降次到2次. 如3Sum固定一个 ...

  7. hibernate映射表

    <?xml version="1.0"?>   <!DOCTYPE hibernate-mapping PUBLIC        "-//Hibern ...

  8. scala中的模式匹配

    基本语法 变量 match { case 值1 => 代码 case 值2 => 代码 ... case 值N if (...) => 代码 case _ => 代码 } 常量 ...

  9. 高性能python

    参考来源:Python金融大数据分析第八章 提高性能有如下方法 1.Cython,用于合并python和c语言静态编译泛型 2.IPython.parallel,用于在本地或者集群上并行执行代码 3. ...

  10. 发送tcp的时候,数据包是如何拷贝的

    发送数据包的时候,用户态的数据包是如何拷贝到内核的kiovec msghd 结构体 icmp是走sock吗? 每一个skb_buffer的大小都是固定的吗?所以有skb_available这样的函数 ...