设为首页 收藏本站
查看: 439|回复: 0

[经验分享] JDBC+mysql

[复制链接]

尚未签到

发表于 2016-9-6 06:03:29 | 显示全部楼层 |阅读模式
1.       什么是JDBC?JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
2.  jdbc操作数据库的总体模型:
       1)一张表对应一个pojo类,也就是一个表对应一个java对象。
       2pojo类中的属性对象表中的相应的字段。
       3)一个pojo类有一个dao类,通过导类操作对应的pojo类中的属性值来实现对数据库中数据的曾、删、改、查等操作
 
DSC0000.gif
 
                             JDBC 操作数据库的模型 
  
3.  连接数据库的种类及方法:
不同的数据库,使用的驱动类不同,对应的连接对象也不同,不过他们都有共同点,
      驱动类都是要到对应的官网下载驱动包,比如mysql的驱动包为:mysql-connector-java-5.0.5-bin.jar,将驱动包放置在工程的lib文件夹下,如果没有该文件夹,就新建一个,把驱动包复制进去,然后进行配置,有些会自动进行配置。连接urljdbc:+所用的数据库类型+访问路径+端口号+要操作的数据库,接着根据用户和密码得到连接对象,常用的数据库类型得到连接的方法如下:
1)、Oracle8/8i/9i数据库(thin模式)
    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
    String url="jdbc:oracle:thin:@localhost:1521:orcl";
    //orcl
为数据库的SID
    String user="test";
    String password="test";
    Connection conn= DriverManager.getConnection(url,user,password);

    2)、DB2数据库
    Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
    String url="jdbc:db2://localhost:5000/sample";
    //sample
为你的数据库名
    String user="admin";
    String password="";
    Connection conn= DriverManager.getConnection(url,user,password);

    3)、Sql Server7.0/2000数据库
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
    String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";
    //mydb
为数据库
    String user="sa";
    String password="";
    Connection conn= DriverManager.getConnection(url,user,password);

    4)、Sybase数据库
    Class.forName("com.sybase.jdbc.SybDriver").newInstance();
    String url =" jdbc:sybase:Tds:localhost:5007/myDB";
    //myDB
为你的数据库名
    Properties sysProps = System.getProperties();
    SysProps.put("user","userid");
    SysProps.put("password","user_password");
    Connection conn= DriverManager.getConnection(url, SysProps);

    5)、Informix数据库
    Class.forName("com.informix.jdbc.IfxDriver").newInstance();
    String url =
    "jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;
    user=testuser;password=testpassword";
    //myDB
为数据库名
    Connection conn= DriverManager.getConnection(url);

    6)、MySQL数据库
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
    String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicod
    e=true&characterEncoding=8859_1"
    //myDB
为数据库名
    Connection conn= DriverManager.getConnection(url);

 
 

4.JDBC常用接口:
 


ResultSet


代表执行查询sql的结果集对象,通过遍历结果集可以得到查询的数据。


Statement


用于执行一条sql查询语句的声明对象,执行后可以返回ResulSet对象,其它的语句返回命令执行的个数


PreparedStatement


用于执行预编译sql语句的声明对象,执行查询后可以返回ResulSet对象,其它的语句返回命令执行的个数。


Connection


一个Connection对象代表程序与数据库的一个连结,用与创建Statement对象.


5.下面通过一个简单的列子把这些知识串联起来:
      假设数据库类型使用的是mysql类型,已经创建好了名MyDB数据库,MyDB里面有一个课程
  course,表中有字段,课程代号Cid、课程名称Name、课程学分Score、课程描述Desce四个字段
  那么运用jdbc来操作数据库的步骤如下:
  1)得到数据库连接对象:

//创建数据库的处理类
public class JDataBase {
// 取得数据库的连接对象
public static java.sql.Connection getConnection() {
java.sql.Connection conn = null;
if (conn == null) {
// 连接数据库URL地址
String url = "jdbc:mysql://localhost:3306/MyDB";
// 连接数据库的用户名
String user = "root";
// 连接数据库的密码
String password = "123456";
try { // 创建连接数据库的驱动类对象 java反射技术
Class.forName("com.mysql.jdbc.Driver");
// 根据驱动管理类,得到数据库的连接对象
conn = java.sql.DriverManager
.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (java.sql.SQLException e) {
e.printStackTrace();
}
}
return conn;
}
}

  2)创建表coursepojo类名为CoursePojo,并写好对应的getset方法

  
//课程表的pojo类
public class CoursePojo {
private String CId;//课程代号
private String Name;//课程名称
private String Score;//课程学分
private String Desce;//课程描述
//从写无参构造器
public CoursePojo(){}
//重写构造器并传入参数,以方便创建对象
public CoursePojo(String CId,String Name,String Score,String Desce){
this.CId=CId;
this.Name=Name;
this.Score=Score;
this.Desce=Desce;
}
public String getCId() {
return CId;
}
public void setCId(String cId) {
CId = cId;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getScore() {
return Score;
}
public void setScore(String score) {
Score = score;
}
public String getDesce() {
return Desce;
}
public void setDesce(String desce) {
Desce = desce;
}
}
    

  

 


  

  
  
 

3)创建操作CoursePojo中属性值的ManagerDao类,并实现对数据的增删改查


  

 //操作数据库的导类
public class ManagerDao {
public static void main(String[] args) {
// 创建导类对象
ManagerDao dao = new ManagerDao();
for (int i = 1; i < 10; i++) {
// 创建课程pojo对象,并传人相应的参数
CoursePojo c = new CoursePojo("00" + i, "course" + i, "" + i,
"desc" + i);
// 调试查找课程的方法
System.out.println("课程信息:" + dao.searchCourse(c).get(0).getName());
// 调试修改课程的方法
//
dao.modifyCourse(c);
System.out.println("xiug ");
}
}
// 添加课程的方法,返回sql语句执行条数,如果返回0,则表示操作失败
public int addCourse(CoursePojo c) {
int count = 0;
// 获得数据库连接
java.sql.Connection conn = JDataBase.getConnection();
try { // 编写需要执行的sql语句
String sql = "insert into course(CId,Name,Score,Desce) values(?,?,?,?)";
// 得到预编译处理对象
java.sql.PreparedStatement pstmt = conn.prepareStatement(sql);
// 向数据库中插入相应的数据
pstmt.setString(1, c.getCId());
pstmt.setString(2, c.getName());
pstmt.setString(3, c.getScore());
pstmt.setString(4, c.getDesce());
count = pstmt.executeUpdate();
// 关闭接口集
pstmt.close();
conn.close();
} catch (Exception ef) {
System.out.println("插入课程失败");
ef.printStackTrace();
}
return count;
}
// 查找课程信息,返回一个存有课程信息的队列
public java.util.ArrayList<CoursePojo> searchCourse(CoursePojo c) {
// 创建一个队列对象
java.util.ArrayList<CoursePojo> list = new java.util.ArrayList<CoursePojo>();
// 获得数据库连接
java.sql.Connection conn = JDataBase.getConnection();
try {
// 编写查询sql语句
String sql = "select * from course where CId=" + c.getCId();
// 得到执行对象
java.sql.Statement stmt = conn.createStatement();
// 返回一个存有查询结果的结果集
java.sql.ResultSet set = stmt.executeQuery(sql);
// 遍历结果集,并且将查询的数据设置pojo对象的属性
while (set.next()) {
c.setCId(set.getString(1));
c.setName(set.getString(2));
c.setScore(set.getString(3));
c.setDesce(set.getString(4));
// 将课程对象存到队列中
list.add(c);
}
// 关闭接口集
set.close();
stmt.close();
conn.close();
} catch (Exception ef) {
ef.printStackTrace();
}
return list;
}
// 修改课程
public int modifyCourse(CoursePojo c) {
int count = 0;
// 获得数据库连接
java.sql.Connection conn = JDataBase.getConnection();
try {
// 拼凑sql修改语句语句
String sql = "update course set Name='" + c.getName() + "',Score='"
+ c.getScore() + "',Desce='" + c.getDesce()
+ "' where CId=" + c.getCId();
java.sql.PreparedStatement pstmt = conn.prepareStatement(sql);
count = pstmt.executeUpdate();
pstmt.close();
conn.close();
} catch (Exception ef) {
ef.printStackTrace();
}
return count;
}
// 删除课程的方法
public int deleteCourse(CoursePojo c) {
int count = 0;
// 获得数据库连接
java.sql.Connection conn = JDataBase.getConnection();
try {
String sql = "delete from course where CId=" + c.getCId();
java.sql.PreparedStatement pstmt = conn.prepareStatement(sql);
// 执行SQL语句
count = pstmt.executeUpdate();
// 关闭接口 集
pstmt.close();
conn.close();
} catch (Exception ef) {
ef.printStackTrace();
}
return count;
}
}

   说明:在查找时将查找结果存到队列中是为了在使用时方便取出来,其他操作返回一个int是为了判断操作是否执行成功。sql有两种语句,一种是拼凑sql语句,另一种是占位符sql语句,比如String sql = "insert into course(CId,Name,Score,Desce) values(?,?,?,?)";使用这中语句的好处是执行的速度快,而且比较安全,因为它是先发送语句,再发送对应的数据,而拼凑sql语句是一种很有规则的语句,很容易被人破解。
  
6.总结
  在使用jdbc操作数据库时,细心是最重要的,在拼凑sql语句时玩的是文字游戏,不小心写错一个字母,得出的结果就可能完全不同,精彩性的报语法错误,关键的是每一步都打印出调试的信息,这样方便与出错时检查
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-268099-1-1.html 上篇帖子: MySql 分页 下篇帖子: MySQL初步
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表