JDBC JSP Servlet

总结

今天早上的考试主要考Java的网络,HttpClient的get,post方法,Socket的文件传输和Xml和Json文件的解析,对于HttpCLient很简单,只需要用HttpCLient去读取文件就行了,而对于Socket需要注意用换行符,因为有时候没有换行符代码会阻塞在readline处,使代码不往下执行,但是又很难找到原因。而对于Xml和Json文件的解析,需要注意编码格式,用utf-8编码,不然编码会有问题。如果有第三方库的话,mvn package打包的jar中只会含有自己的代码,直接用java -jar *.jar会报一个类找不到的错误,对于这种情况,我们需要在maven打包时把第三方依赖打包进去,有多种方式可以选择,最简单的选择maven-assembly-plugin插件,设置descriptorRefs运行即可。

maven打包

maven打包打上第三方依赖包

Maven生成可以直接运行的jar包的多种方式

maven-dependency-plugin插件的使用

Copying project dependencies

IDEA错误

Error:java: Compilation failed: internal java compiler error

解决

  1. 1、查看项目的jdk(Ctrl+Alt+shift+S) File ->Project Structure->Project Settings ->Project
  2. File ->Project Structure->Project Settings -> Modules -> (需要修改的工程名称) -> Sources ->
  3. 查看idea中Java配置(Compiler->Java Compiler)

JDBC

ODBC:Open DataBase Connetivity

JDBC:Java DataBase Connectivity

JDBC API

  1. DriverManager
  2. Connection
  3. Statement
  4. PreparedStatement
  5. ResultSet

JDBC Driver API

  1. JDBC-ODBC bridge
  2. 部分java技术的本地API驱动程序
  3. 全部基于java技术的本地API驱动程序
  4. 全部基于java技术的本地协议驱动程序

JDBC编程流程

  1. 加载驱动
  2. 打开连接
  3. 执行查询
  4. 处理结果
  5. 清理环境

JDBC为什么使用反射加载驱动

  1. 驱动jar包不存在时,我们有其他方法
  2. 解耦(避免或减少未来切换数据源时对代码的变更。)

JDBC java mysql

  1. 使用mysql-connector-java(maven)
  2. mysql-connector-java 8用Class.forName("com.mysql.cj.jdbc.Driver");,不要用Class.forName("com.mysql.jdbc.Driver");

JDBC 连接 MySQL 时碰到的小坑

为什么不需要Class.ForName("com.mysql.cj.jdbc.Driver")也可以执行

query

private static void query(){
String sql = "select * from t_user where id = ?";
try(Connection connection = DriverManager.getConnection(MYSQL_URL,MYSQL_NAME,MYSQL_PWD);
PreparedStatement statement = connection.prepareStatement(sql);){
statement.setInt(1,2);
ResultSet rs = statement.executeQuery();
while (rs.next()){
System.out.print(rs.getInt("id")+" ");
System.out.print(rs.getString("username")+" ");
System.out.print(rs.getString("pwd")+" ");
System.out.print(rs.getString("email")+" ");
System.out.println();
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

insert

private static void insert(){
String sql = "insert into t_user(id,username,pwd,email) values (?,?,?,?)";
try (Connection connection = DriverManager.getConnection(MYSQL_URL,MYSQL_NAME,MYSQL_PWD);
PreparedStatement statement = connection.prepareStatement(sql);){
statement.setInt(1,3);
statement.setString(2,"dey");
statement.setString(3,"123");
statement.setString(4,"123@qq.com");
//返回值是更新的记录数量
int resultNum = statement.executeUpdate();
System.out.println("插入的记录数量:"+resultNum);
} catch (SQLException e) {
e.printStackTrace();
}
}

update

private static void update(){
String sql = "update t_user set username=?,pwd=?,email=? where id =?";
try (Connection connection = DriverManager.getConnection(MYSQL_URL,MYSQL_NAME,MYSQL_PWD);
PreparedStatement statement = connection.prepareStatement(sql);){
statement.setString(1,"lcu");
statement.setString(2,"123u");
statement.setString(3,"123u@qq.com");
statement.setInt(4,3);
//返回值是更新的记录数量
int resultNum = statement.executeUpdate();
System.out.println("更新的记录数量:"+resultNum);
} catch (SQLException e) {
e.printStackTrace();
}
}

delete

private static void delete(){
String sql = "delete from t_user where id=?";
try (Connection connection = DriverManager.getConnection(MYSQL_URL,MYSQL_NAME,MYSQL_PWD);
PreparedStatement statement = connection.prepareStatement(sql);){
statement.setInt(1,3);
//返回值是更新的记录数量
int resultNum = statement.executeUpdate();
System.out.println("删除的记录数量:"+resultNum);
} catch (SQLException e) {
e.printStackTrace();
}
}

JDBC 事务

  1. 原子性
  2. 一致性
  3. 隔离性
  4. 持久性

7.21实习培训日志-JDBC JSP Servlet的更多相关文章

  1. 7.23实习培训日志-JDBC

    总结 今天下午考试,JDBC,这个本身很简单,但是需要我们Dockerfile+Docker Compose运行,这个东西就很复杂.原来学习时没有怎么看,这一次就很懵,完全不知道怎么弄,反正环境都没有 ...

  2. 7.22实习培训日志-JSP Servlet

    周末总结 今天下午在学习servlet,想自己做一个简单的例子,于是用idea新建一个maven项目,为了后文叙述方便,我们取名为项目1,点击create from archetype,我先选择org ...

  3. 7.30实习培训日志-SQL优化

    总结 今天早上考试,下午主要是老师引导我们学习SQL优化,晚上主要是同学的技术分享,杨松柏同学主要给我们分享了java的io的一些东西,c10k问题,bio(同步阻塞IO),NIO(同步非阻塞IO), ...

  4. 7.27实习培训日志-Oracle SQL(三)

    Oracle SQL(三) 视图 特性 简单视图 复杂视图 关联的表数量 1个 1个或多个 查询中包含函数 否 是 查询中包含分组数据 否 是 允许对视图进行DML操作 是 否 CREATE [OR ...

  5. 7.24实习培训日志-Docker-Compose

    Docker-Compose 对于昨天的考试,需要 项目根目录下需要docker/mysql/Dockerfile 文件用于构建mysql镜像 项目根目录下需要docker/java/Dockerfi ...

  6. 7.19实习培训日志- java进阶

    java进阶 java集合 Collection List ArrayList jdk1.2,异步处理,性能高,线程不安全 Vector jdk1.0,同步处理,性能低,线程安全 Set HashSe ...

  7. 7.10实习培训日志-markdown Git

    父模块github地址 一. markdown 1. markdown列表 html是一种发布的格式,markdown是一种书写的格式 区块引用 列表 图片 表格 html 标题 记笔记 写博客 2. ...

  8. 7.11实习培训日志-Git Linux

    Git git子模块 先在GitHub创建两个空的respository,一个super_project和一个sub_project. 然后在git bash中向库中写入一些文件. 在super_pr ...

  9. 7.31实习培训日志-docker sql

    docker mysql docker问题 今天问了老师有关docker的问题,entrypoint和cmd的区别,两者同时存在cmd的执行结果会被当做参数传入entrypoint. dockerfi ...

随机推荐

  1. Ansible playbook练习

    示例1:创建用户的Playbook --- - name: create user hosts: openstack gather_facts: false tasks: - name: create ...

  2. keeplive使用

    一.简介 Keepalived是一个免费开源的,用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层.第4层和第7层交换机的功能.主要提供loadbalancing( ...

  3. Spring Cloud之Zuul负载均衡

    Zuul网关默认是实现负载均衡的,不需要任何配置.默认开启ribbon效果的 可以启启动两个服务端口,访问下.

  4. 深入理解JVM - 早期(编译期)优化

    Java“编译期”是一段“不确定”的操作过程:可能是指一个前端编译器(编译器的前端)把*.java文件转变为*.class文件的过程:可能是指虚拟机的后端运行期编译器(JIT编译器,Just In T ...

  5. spring boot: 一般注入说明(五) @Component, application event事件为Bean与Bean之间通信提供了支持

    spring的事件,为Bean与Bean之间通信提供了支持,当一个Bean处理完成之后,希望另一个Bean知道后做相应的事情,这时我们就让另外一个Bean监听当前Bean所发送的事件. spring的 ...

  6. java: jdk1.8以后就不支持桥接的方式

    java: jdk1.8以后就不支持桥接的方式 如果想继续使用桥接的方式,请使用jdk1.7及以下版本.

  7. UniDAC 的 RecordCount 属性注意事项

    一直以来都是用UniDAC作为数据库查询组件,而一般的写法都是这样: UniQuery_sqlite.close; UniQuery_sqlite.SQL.Clear; UniQuery_sqlite ...

  8. ckeditor出现错误“从客户端(***)中检测到有潜在危险的 Request.Form值”的解决方法

    ckeditor出现错误“从客户端(***)中检测到有潜在危险的 Request.Form值”的解决方法 页面中使用ckeditor,提交文章时总是出错,“从客户端(TextBox1="&l ...

  9. getline()函数详解 (2013-03-26 17:19:58)

     学习C++的同学可能都会遇到一个getline()函数,譬如在C++premer中,标准string类型第二小节就是“用getline读取整行文本”.书上给的程序如下: int main() {   ...

  10. JavaScript中,让一个div在固定的父div中任意拖动

    1.css代码 #big { border: 1px solid #FF3300; width: 300px; height: 300px; position: relative; } #small ...