JDBC基础学习(一)2919.6.28

 
 1.学习并实现了通过JDBC的数据库连接。
2.学习并实现了通过JDBC创建数据库创建表。
3.学习并实现了通过JDBC对数据库进行增删改查。
4.初步完成了任务:
(1)创建了两张表(persion, parent)并用外连接等连接方式进行连接操作。
(2)向表persion中插入十条数据。
(3)检索出persion表中的数据并打印。  
   
        方法executeQuery 
用于产生单个结果集的语句,例如 SELECT 语句。 被使用最多的执行 SQL 语句的方法是 executeQuery。
这个方法被用来执行 SELECT 语句,它几乎是使用最多的 SQL 语句。

        方法executeUpdate
用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,
例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是
修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,
指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,
executeUpdate 的返回值总为零。
        使用executeUpdate方法是因为在 createTableCoffees 中的 SQL 语句是 DDL 
        (数据定义语言)语句。创建表,改变表,删除表都是 DDL 语句的例子,
        要用 executeUpdate 方法来执行。你也可以从它的名字里看出,
        方法 executeUpdate 也被用于执行更新表 SQL 语句。
        实际上,相对于创建表来说,executeUpdate 用于更新表的时间更多,
        因为表只需要创建一次,但经常被更新。

        方法execute:
        用于执行返回多个结果集、多个更新计数或二者组合的语句。因为多数程序员不会需要该高级功能


import java.sql.*;


public class JdbcPerTran {

	// JDBC driver name and database URL
	static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";  
	static final String DB_URL = "jdbc:mysql://localhost:3306/samp_db?serverTimezone=GMT";

	//  Database credentials
	static final String USER = "root";
	static final String PASS = "zyl123";

	public static void main(String[] args) {
		Connection conn = null;
		Statement stmt = null;
		try{
			//STEP 2: Register JDBC driver
			Class.forName("com.mysql.cj.jdbc.Driver");

			//STEP 3: Open a connection
			System.out.println("Connecting to a selected database...");
			conn = DriverManager.getConnection(DB_URL, USER, PASS);
			//conn = getConn();
			System.out.println("Connected database successfully...");

			//STEP 4: Execute a query
			System.out.println("Creating table in given database...");
			stmt = conn.createStatement();

			String sql = "CREATE TABLE person " +
					"(id INTEGER not NULL, " +
					" name VARCHAR(255), " + 
					" pid VARCHAR(255), " + 
					" createtime VARCHAR(255), " + 
					" PRIMARY KEY ( id ))"; 
			String sql2 = "CREATE TABLE person2 " +
					"(id INTEGER not NULL, " +
					" name VARCHAR(255), " + 
					" pid VARCHAR(255), " + 
					" createtime VARCHAR(255), " + 
					" PRIMARY KEY ( id ))"; 
			String sql3 = "Select * from person a left outer join person2 b on a.pid = b.id";
			stmt.executeUpdate(sql);
			stmt.executeUpdate(sql2);
			//先对两个表进行插入并查看
			System.out.println("Inserting table in given database...");
			System.out.println("*********************************");
			JdbcPerTran.insert(conn, new Test627("1","Ach", "1", "14"));
			JdbcPerTran.insert(conn, new Test627("2","Bch", "2", "15"));
			JdbcPerTran.insert(conn, new Test627("3","Cch", "3", "16"));
			JdbcPerTran.insert(conn, new Test627("4","Dch", "4", "17"));
			JdbcPerTran.insert(conn, new Test627("5","Ech", "5", "19"));
			//表二
			JdbcPerTran.insertP(conn, new Test627("1","Fch", "1", "17"));
			JdbcPerTran.insertP(conn, new Test627("2","Gch", "2", "19"));
			System.out.println("Inserted");
			JdbcPerTran.getAll();
			//进行外连接然后查看
			System.out.println("Created table in given database...");
			stmt.executeQuery(sql3);
			System.out.println("外连接");
			
		
			JdbcPerTran.getAllP();
		
		}catch(SQLException se){
			//Handle errors for JDBC
			se.printStackTrace();
		}catch(Exception e){
			//Handle errors for Class.forName
			e.printStackTrace();
		}finally{
			//finally block used to close resources
			try{
				if(stmt!=null)
					conn.close();
			}catch(SQLException se){
			}// do nothing
			try{
				if(conn!=null)
					conn.close();
			}catch(SQLException se){
				se.printStackTrace();
			}//end finally try
		}//end try
		System.out.println("Goodbye!");
	}//end main
	
	
	private static Connection getConn() {
		String driver = "com.mysql.cj.jdbc.Driver";
		String url = "jdbc:mysql://localhost:3306/samp_db?serverTimezone=GMT";
		String username = "root";
		String password = "zyl123";
		Connection conn = null;
		try {
			Class.forName(driver); //classLoader,加载对应驱动
			conn = (Connection) DriverManager.getConnection(url, username, password);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	private static int insert(Connection conn, Test627 test627) throws SQLException {
		//Connection conn = getConn();
		int i = 0;
		String sql = "insert into person (id,name,pid,createtime) values(?,?,?,?)";
		PreparedStatement pstmt = null;
		try {
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, test627.getId());
			pstmt.setString(2, test627.getName());
			pstmt.setString(3, test627.getPid());
			pstmt.setString(4, test627.getCreate());
			
			i = pstmt.executeUpdate();
			//pstmt.close();
			//conn.close();
		} catch (SQLException e) {
			throw e;
		} finally {
			if(pstmt != null) {
				try {
					pstmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		return i;
	}
	private static int insertP(Connection conn, Test627 test627) throws SQLException {
		//Connection conn = getConn();
		int i = 0;
		String sql = "insert into person2 (id,name,pid,createtime) values(?,?,?,?)";
		PreparedStatement pstmt = null;
		try {
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, test627.getId());
			pstmt.setString(2, test627.getName());
			pstmt.setString(3, test627.getPid());
			pstmt.setString(4, test627.getCreate());
			
			i = pstmt.executeUpdate();
			//pstmt.close();
			//conn.close();
		} catch (SQLException e) {
			throw e;
		} finally {
			if(pstmt != null) {
				try {
					pstmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		return i;
	}
	
	
	static class Test627 {
		//id,name,pid,createtime
		private String id;
		private String name;
		private String pid;
		private String createtime;

		Test627(String id, String name, String pid, String createtime) {
			this.id = id; //default
			this.name = name;
			this.pid = pid;
			this.createtime = createtime;
		}

		public String getId() {
			return id;
		}

		public void setId(String id) {
			this.id = id;
		}

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		public String getPid() {
			return pid;
		}

		public void setPid(String pid) {
			this.pid = pid;
		}

		public String getCreate() {
			return createtime;
		}

		public void setCreate(String createtime) {
			this.createtime = createtime;
		}
	}
	//select
	private static Integer getAll() {
		Connection conn = getConn();
		String sql = "select * from person";
		//String sql = "SELECT * from person LEFT OUTER JOIN person2 ON person.pid = person2.id; ";
		PreparedStatement pstmt;
		try {
			pstmt = (PreparedStatement)conn.prepareStatement(sql);
			ResultSet rs = pstmt.executeQuery();
			int col = rs.getMetaData().getColumnCount();
			System.out.println("=====================================================================");
			while (rs.next()) {
				for (int i = 1; i <= col; i++) {
					System.out.print(rs.getString(i) + "\t");
					if ((i == 2) && (rs.getString(i).length() < 8)) {
						System.out.print("\t");
					}
				}
				System.out.println("");
			}
			System.out.println("=====================================================================");
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	
	private static Integer getAllP() {
		Connection conn = getConn();
		//String sql = "select * from person";
		String sql = "SELECT * from person LEFT OUTER JOIN person2 ON person.pid = person2.id; ";
		PreparedStatement pstmt;
		try {
			pstmt = (PreparedStatement)conn.prepareStatement(sql);
			ResultSet rs = pstmt.executeQuery();
			int col = rs.getMetaData().getColumnCount();
			System.out.println("=====================================================================");
			while (rs.next()) {
				for (int i = 1; i <= col; i++) {
					System.out.print(rs.getString(i) + "\t");
					if ((i == 2) && (rs.getString(i).length() < 8)) {
						System.out.print("\t");
					}
				}
				System.out.println("");
			}
			System.out.println("=====================================================================");
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	
}//end JDBCExample


 

 

内连接:
内连接也叫连接,是最早的一种连接。还可以被称为普通连接或者自然连接,内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息。
内连接的语法如下:
select fieldlist from table1 [inner] join table2 on table1.column=table2.column

 
外连接:左连接,右连接,全连接
    左连接:
left join是以左表的记录为基础的,示例中person可以看成左表,person2可以看成右表,它的结果集是1表中的数据,再加上1和2表匹配的数据。换句话说,左表(person)的记录将会全部表示出来,而右表(person2)只会显示符合搜索条件的记录。2表记录不足的地方均为NULL。

Select * from person a left outer join person2 b on a.pid = b.id

    右连接:
和left join的结果刚好相反,是以右表为基础的, 显示右表的所有记录,在加上person1和person2匹配的结果。person表不足的地方用NULL填充.

Select * from person a right outer join person2 b on a.pid = b.id

    全连接:
左表和右表都不做限制,所有的记录都显示,两表不足的地方用null 填充
select * from parent a full join son b on a.pid = b.pid;

mysql中不支持全连接
但可以通过如下方式解决:

Select * from person a left outer join person2 b on a.pid = b.id

union

Select * from person a right outer join person2 b on a.pid = b.id

 

 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值