`
沈冠军
  • 浏览: 110140 次
  • 性别: Icon_minigender_1
  • 来自: 玉林
社区版块
存档分类
最新评论

JDBC+mysql

阅读更多

1.       什么是JDBC?JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。

2.  jdbc操作数据库的总体模型:

       1)一张表对应一个pojo类,也就是一个表对应一个java对象。

       2pojo类中的属性对象表中的相应的字段。

       3)一个pojo类有一个dao类,通过导类操作对应的pojo类中的属性值来实现对数据库中数据的曾、删、改、查等操作

 

 

                             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语句时玩的是文字游戏,不小心写错一个字母,得出的结果就可能完全不同,精彩性的报语法错误,关键的是每一步都打印出调试的信息,这样方便与出错时检查

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 5.8 KB
分享到:
评论
1 楼 so_depress 2011-11-09  
学习了,最近正好要一个数据库

相关推荐

Global site tag (gtag.js) - Google Analytics