金刀的博客 | JDBC Create操作

JDBC操作数据库 CREATE操作

0x01 JDBC是什么

JDBC是Java Database Connectivity(Java数据库连接)的缩写,JDBC定义了用户如何通过Java语言去连接数据库。它是来自Oracle公司的Java标准版平台的一部分。它提供查询和更新数据库中的数据的方法,并面向关系数据库。
– 来源于《维基百科》

0x02 什么是CRUD操作

CRUD是CREATE(增加)、READ(查询)、UPDATE(修改)、DELETE(删除)的简写,即JDBC的增、删、查、改四个操作。

0X03 实现流程

  • 语言/环境

    • 实现语言:Java
    • 环境要求:
      • 开发平台:eclipse
      • 数据库:Oracle
      • 中间件:odbc6 (密码:p8h2)
  • JDBC操作数据库基本步骤

    1. 注册数据库驱动程序到Java虚拟机(JVM)
    2. 建立数据库连接;
    3. 创建数据库操作对象;
    4. 定义操作的SQL语句;
    5. 执行数据库操作;
    6. 获取并操作结果集;
    7. 关闭对象,对数据库操作的资源进行回收(关闭结果集ResultSet->关闭操作PreparedStatement->关闭连接对象Connection)
  • 需求分析

    • 表结构
    -- 班级信息表
    CREATE TABLE classInformation
    (
    	classId	INT NOT NULL PRIMARY KEY,	-- 班级编号
    	className	VARCHAR(40)	NOT NULL,	-- 班级名称
    	classDate	DATE DEFAULT SYSDATE NOT NULL,	-- 班级创建时间
    	classNote	VARCHAR(200)	-- 班级备注
    );
    
    • 新增步骤:
      1. 创建数据库连接类
      2. 创建班级信息表实体类对象类
      3. 创建新增记录的方法,使用prepareStatement设置参数,返回布尔值(true:成功/false:失败)

0x04 Coding

  • 班级实体类

    import java.util.Date;
    
    /*
     * 班级信息表实体类
     */
    public class ClassInformationEntity {
    	private Integer classId;	// 班级编号
    	private String className;	// 班级名称
    	private Date classDate;		// 班级创建时间
    	private String classNote;	// 班级备注
    	public Integer getClassId() {
    		return classId;
    	}
    	public void setClassId(Integer classId) {
    		this.classId = classId;
    	}
    	public String getClassName() {
    		return className;
    	}
    	public void setClassName(String className) {
    		this.className = className;
    	}
    	public Date getClassDate() {
    		return classDate;
    	}
    	public void setClassDate(Date classDate) {
    		this.classDate = classDate;
    	}
    	public String getClassNote() {
    		return classNote;
    	}
    	public void setClassNote(String classNote) {
    		this.classNote = classNote;
    	}
    }
    
  • 数据库连接类

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    /*
     * 数据库连接类
     */
    public class DBHelper {
    	// 定义连接对象
    	private Connection conn = null;
    	// 定义操作对象
    	private PreparedStatement pstm = null;
    	// 定义结果集对象
    	private ResultSet rs = null;
    	
    	/**
    	 * 获取数据库连接的方法
    	 * @return	Connection连接对象
    	 */
    	public Connection getConnection() {
    		// 定义驱动信息
    		final String DRIVER = "oracle.jdbc.driver.OracleDriver";
    		/*
    		 * jdbc:表示采用jdbc方式连接数据库
    		 * oracle:表示连接的是Oracle数据库
    		 * thin:表示连接时采用thin模式
    		 * @192.168.1.19表示目标数据库服务所在的网络位置
    		 * 1521:端口号,Oracle服务默认端口1521
    		 * orcl:数据库实例名称
    		 */
    		final String URL = "jdbc:oracle:thin:@192.168.1.19:1521:orcl";
    		final String USER = "scott";		// 数据库登录用户名
    		final String PASSWORD = "tiger";	// 数据库登录密码
    		try {
    			// 注册驱动
    			Class.forName(DRIVER);
    			conn = DriverManager.getConnection(URL, USER, PASSWORD);
    		} catch (Exception e) {
    			
    		}
    		return conn;
    	}
    	
    	/**
    	 * 关闭数据库资源
    	 * @param conn	数据库连接对象
    	 * @param pstm	数据库操作对象
    	 * @param rs	结果集对象
    	 */
    	public void closeConnection(Connection conn,PreparedStatement pstm,ResultSet rs) {
    		try {
    			if(rs!=null) {
    				rs.close();
    			}
    			if(pstm!=null) {
    				pstm.close();
    			}
    			if(conn!=null) {
    				conn.close();
    			}
    		} catch (Exception e) {
    			
    		}
    	}
    	
    	/**
    	 * 测试数据库连接是否成功
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		DBHelper db = new DBHelper();
    		Connection connection = db.getConnection();
    		if(connection!=null)
    			System.out.println("数据库连接成功!");
    		else
    			System.out.println("数据库连接失败!");
    	}
    }
    

    附:Oracle连接字符串JDBC语句的详解

  • Insert类

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.util.Date;
    import java.sql.ResultSet;
    
    public class Insert {
    	// 声明数据库连接对象
    	private Connection conn = null;
    	// 声明数据库操作对象
    	private PreparedStatement pstm = null;
    	// 声明结果集对象
    	private ResultSet rs = null;
    	
    	/**
    	 * @param classInfo	班级信息对象
    	 * @return	flag为true表示添加成功,提交事务
    	 * 			flag为false表示添加失败,回滚事务;
    	 */
    	public boolean insertClassInformaion(ClassInformationEntity classInfo) throws SQLException {
    		Boolean flag = false;
    		try {
    			// 获取连接对象
    			conn = DBHelper.getConnection();
    			// 定义SQL语句
    			final String INSERT = "INSERT INTO classInfo(classId,className,classDate,classNote) VALUES(?,?,?,?)";
    			// 获取操作对象
    			pstm = conn.prepareStatement(INSERT);
    			// 通过PrepareStatement设置参数
    			pstm.setInt(1, 135);							// 设置班级编号
    			pstm.setString(2, classInfo.getClassName());	// 设置班级名称
    			pstm.setDate(3, new java.sql.Date(classInfo.getClassDate().getTime()));	// 设置创建日期
    			pstm.setString(4, classInfo.getClassNote());	// 设置班级备注
    			// 执行SQL语句
    			pstm.executeUpdate();
    			// 提交事务,将数据写入到数据库中,永久保存(如果不提交,则数据在内存中保存)
    			conn.commit();
    			flag = true;
    		} catch(SQLException e) {
    			// 数据添加失败,回滚事务
    			conn.rollback();
    		} finally {
    			// 回收数据库资源
    			DBHelper.closeConnection(conn, pstm, rs);
    		}
    		return flag;
    	}
    	
    	public static void main(String[] args) throws Exception {
    		// 声明并实例化Insert对象
    		Insert insert = new Insert();
    		// 声明并实例化班级信息实体类(ClassInformationEntity)
    		ClassInformationEntity classEntity = new ClassInformationEntity();
    		// 把参数封装到实体对象
    		classEntity.setClassId(135);
    		classEntity.setClassName("包拯");
    		classEntity.setClassDate(new Date());
    		classEntity.setClassNote("包青天");
    		boolean insertClassInformaion = insert.insertClassInformaion(classEntity);
    		if(insertClassInformaion) {
    			System.out.println("班级信息插入成功!");
    		}else {
    			System.out.println("班级信息插入失败!");
    		}
    	}
    }
    
    
  • 效果截图

    • 控制台输出结果

    Console Output

    • 数据库查询结果

    CMD Output

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用.NET Framework实现微信扫码支付的详细代码演示: 1. 在微信支付官网注册并获取商户号、AppID、AppSecret、商户API密钥等信息。 2. 创建一个ASP.NET Web应用程序,添加NuGet包“Senparc.Weixin”和“Senparc.Weixin.MP”。 3. 在Web.config文件中添加以下代码段: ```xml <configuration> <appSettings> <add key="WeixinAppId" value="你的AppID" /> <add key="WeixinAppSecret" value="你的AppSecret" /> <add key="WeixinMchId" value="你的商户号" /> <add key="WeixinKey" value="你的商户API密钥" /> <add key="WeixinPayNotifyUrl" value="http://你的网站域名/WeixinPayNotify.aspx" /> </appSettings> </configuration> ``` 4. 创建一个名为“WeixinPay.aspx”的页面,添加以下代码: ```csharp using Senparc.Weixin.MP.TenPayLibV3; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class WeixinPay : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string openid = GetOpenId(); if (!string.IsNullOrEmpty(openid)) { string out_trade_no = DateTime.Now.Ticks.ToString(); string body = "测试商品"; int total_fee = 1; string spbill_create_ip = Request.UserHostAddress; string notify_url = System.Configuration.ConfigurationManager.AppSettings["WeixinPayNotifyUrl"]; string trade_type = "NATIVE"; string product_id = out_trade_no; string attach = ""; string scene_info = ""; var res = TenPayV3.Unifiedorder(openid, body, out_trade_no, total_fee, spbill_create_ip, notify_url, trade_type, product_id, attach, scene_info); if (res.return_code == "SUCCESS" && res.result_code == "SUCCESS") { string qrCodeUrl = res.code_url; imgQRCode.ImageUrl = "http://chart.apis.google.com/chart?chs=200x200&cht=qr&chld=L|0&chl=" + HttpUtility.UrlEncode(qrCodeUrl); } } } } private string GetOpenId() { string code = Request.QueryString["code"]; if (string.IsNullOrEmpty(code)) { string redirect_uri = HttpUtility.UrlEncode(Request.Url.AbsoluteUri); string url = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state=123#wechat_redirect", System.Configuration.ConfigurationManager.AppSettings["WeixinAppId"], redirect_uri); Response.Redirect(url); } else { var res = Senparc.Weixin.MP.AdvancedAPIs.OAuthApi.GetAccessToken(System.Configuration.ConfigurationManager.AppSettings["WeixinAppId"], System.Configuration.ConfigurationManager.AppSettings["WeixinAppSecret"], code); if (res.errcode == Senparc.Weixin.ReturnCode.请求成功) { return res.openid; } } return null; } } ``` 5. 创建一个名为“WeixinPayNotify.aspx”的页面,添加以下代码: ```csharp using Senparc.Weixin.MP.TenPayLibV3; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class WeixinPayNotify : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { var res = TenPayV3.GetNotifyData(Request.InputStream); if (res.return_code == "SUCCESS" && res.result_code == "SUCCESS") { string out_trade_no = res.out_trade_no; // 处理订单逻辑,更新订单状态等 Response.Write("<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>"); } } } ``` 6. 在“WeixinPay.aspx”页面中,使用Senparc.Weixin.MP.TenPayLibV3提供的“Unifiedorder”方法生成一个微信扫码支付的二维码,并通过Google Chart API将其转换为图片展示给用户。 7. 在“WeixinPayNotify.aspx”页面中,使用Senparc.Weixin.MP.TenPayLibV3提供的“GetNotifyData”方法获取微信支付结果通知,并处理订单逻辑。 注意:在使用微信支付时,需要确保服务器可以被微信支付服务器访问到。如果是本地测试,可以使用“ngrok”等工具将本地服务器映射到公网IP。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值