没有实现类指向接口,只有接口指向实现类
package com.zx.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DBUtils { private static String url="jdbc:mysql://localhost:3306/test1"; private static String user="root"; private static String password="xxxxxx"; private static String driverClass="com.mysql.jdbc.Driver"; static { //注册驱动 try { Class.forName(driverClass); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 返回一个数据库连接 * @return * @throws SQLException */ public static Connection getConnection() throws SQLException{ return DriverManager.getConnection(url, user, password); } public static void close(ResultSet resultSet,Statement statement,Connection connection) { //6.关闭资源 if (resultSet!=null) { try { resultSet.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (statement!=null) { try { statement.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (connection!=null) { try { connection.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
插入数据
package lesson02; import java.sql.Connection; import java.sql.Date; import java.sql.PreparedStatement; import java.sql.SQLException; import com.zx.util.DBUtils; public class Demo02 { public static void main(String[] args) throws SQLException { // TODO Auto-generated method stub Connection connection=DBUtils.getConnection(); //2.创建Statement【预处理的Statement对象】 //?代表占位 String sql="insert into user (id,name,password,email,birthday) values (?,?,?,?,?)"; PreparedStatement preparedStatement= connection.prepareStatement(sql); //设置参数 preparedStatement.setInt(1, 4); preparedStatement.setString(2, "mailu"); preparedStatement.setString(3, "sdasd"); preparedStatement.setString(4, "qq.com"); /** * setDate的日期类型是java.sql.Date,不是java.util.Date */ preparedStatement.setDate(5, new Date(System.currentTimeMillis())); //执行插入,返回受影响的行数 int r= preparedStatement.executeUpdate(); System.out.println("受影响的行数:"+ r ); //关闭资源 DBUtils.close(null, preparedStatement, connection); } } 结果: 受影响的行数:1
直接拼接sql语句,会有SQL注入问题
解决方法:不让拼接,prepareStatement可以避免SQL注入问题
xml
xml语法
文档声明
必须写在xml文档的第一行写法:<?xml version="1.0" ?> 属性: version:版本号 固定值 1.0 encoding:指定文档的码表。一般写utf-8,也可以 iso-8859-1 standalone:指定文档是否独立 yes 或 no 【很少用】 如果是yes,则表示这个XML文档时独立的,不能引用外部的DTD规范文件;如果是no,则该XML文档不是独立的,表示可以用外部的DTD规范文档。 |
元素:xml文档中的标签
文档中必须有且只能有一个根元素 元素需要正确闭合。<body></body> <br/> 元素需要正确嵌套 元素名称要遵守: 元素名称区分大小写 数字不能开头 |
文本
转义字符:> CDATA: 里边的数据会原样显示,不会产生歧义 <![CDATA[ 数据内容 ]]> |
<?xml version="1.0" encoding="UTF-8"?> <students> <!-- 学生信息 --> <student id="10001"> <name><![CDATA[<林心如]]></name> <age>38</age> <gender>女</gender> <birthday>2018-01-23</birthday> </student> <student id="10002"> <name>林志颖</name> <age>39</age> <gender>男</gender> <birthday>2018-01-23</birthday> </student> <student id="10003"> <name>林志炫</name> <age>38</age> <gender>男</gender> <birthday>2018-01-23</birthday> </student> </students>
xml解析:
DOM解析:
将文档加载进内存,形成一颗dom树(document对象),将文档的各个组成部分封装为一些对象。
优点:因为,在内存中会形成dom树,可以对dom树进行增删改查。
缺点:dom树非常占内存,解析速度慢。
SAX解析
逐行读取,基于事件驱动
优点:不占内存,速度快
缺点:只能读取,不能回写(改数据)
@Test 单元测试
package lesson09; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.junit.Test; /** * 单元测试:Junit * @author ZX *单元测试的名字都是以test开头的 */ public class Demo01 { public static void main(String[] args) { // TODO Auto-generated method stub } @Test public void test1() throws FileNotFoundException, DocumentException { //使用dom4j技术进行SAX解析 //1.创建reader对象 SAXReader reader=new SAXReader(); //2.读取文档 Document doc= reader.read(new FileInputStream("books.xml")); //3.获取根标签(根节点) Element root= doc.getRootElement(); System.out.println("根标签的名字:"+root.getName()); //4.获取书架的子标签 List<Object> list= root.elements(); for (Object obj:list) { System.out.println(obj.getClass()) ; Element book=(Element)obj; System.out.println(book.getName()); System.out.println(book.element("名字").getText()); System.out.println(book.element("作者").getText()); System.out.println(book.element("出版社").getText()); //获取属性 System.out.println(book.attributeValue("number")); System.out.println("============================="); } } }
<?xml version="1.0" encoding="UTF-8"?> <书架> <书 number="100"> <名字>Java技术</名字> <作者>sda</作者> <出版社>任命文学</出版社> </书> <书 number="200"> <名字>JS技术</名字> <作者>sdsa</作者> <出版社>任命文学</出版社> </书> <书 number="300"> <名字>PHP技术</名字> <作者>sdaa</作者> <出版社>任命文学</出版社> </书> </书架>
XPATH:
XPath规则:
// nodename 选取此节点。 / 从根节点选取。 .. 选取当前节点的父节点。 @ 选取属性。 [@属性名] 属性过滤 [标签名] 子元素过滤 |
使用的方法:
selectSingleNode():
selectNodes():
使用步骤:
1、注意:要导包 jaxen...jar
2、创建解析器SAXReader reader = new SAXReader();
3、解析xml 获得document对象 Document document = reader.read(url);
package lesson09; import java.io.FileInputStream; import java.io.FileNotFoundException; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Node; import org.dom4j.io.SAXReader; import org.junit.Test; public class Demo02 { @Test public void test1() throws Exception { //1.创建SAXReader SAXReader reader=new SAXReader(); Document document= reader.read(new FileInputStream("books.xml")); //2.进行XPATH查询 Node node= document.selectSingleNode("//名字"); System.out.println(node.getText()); Node node2= document.selectSingleNode("/书架/书/作者"); System.out.println(node2.getText());
Node node2= document.selectSingleNode("//书/@number");//查询书的number属性,最后用Attribute 来承接这个属性
}
} }
XMLWriter:修改节点并保存
public static void main(String[] args) throws Exception { SAXReader reader = new SAXReader(); Document doc = reader.read(new FileInputStream("xml/books.xml")); List list = doc.selectNodes("//书/@出版社"); for(Object o : list){ if(o instanceof Attribute){ Attribute att = (Attribute) o; att.setValue("美国"); } } XMLWriter writer = new XMLWriter(new FileOutputStream("xml/books.xml")); writer.write(doc); writer,close(); }
Tomcat:
Tomcat是在SUN公司推出的小型Servlet/JSP调试工具的基础上发展起来的一个优秀的Servlet容器,Tomcat本身完全用Java语言编写。 是一个免费的Web服务器。
官方网址为http://tomcat.apache.org。得到了广大开源代码志愿者的大力支持,且可以和目前大部分的主流Web服务器(IIS、Apache服务器)一起工作,它运行稳定、可靠且高效。已成为目前开发企业JavaWeb应用的最佳Servlet容器选择之一。