一、JDBC
public class JDBC {
/*
* JDBC四大参数:
* driverClassName:com.mysql.jdbc.Driver
* url:jdbc:mysql://localhost:3306/mydb3
* username:root
* password:123
*
* PreparedStatement ps = con.prepareStatement(sql);
* ps.addBatch();添加批
* ps.executeBatch();执行批
*/
static Properties p = new Properties();
static String driverClassName = null;
static String url = null;
static String username = null;
static String password = null;
static Connection con = null;
static Statement statement = null;
static PreparedStatement preparedStatement = null;
static ResultSet rs = null;
static {
try {
p.load(new FileInputStream("oracleJDBC.properties"));
driverClassName = p.getProperty("driverClassName");
url = p.getProperty("url");
username = p.getProperty("username");
password = p.getProperty("password");
//1.注册驱动
Class.forName(driverClassName);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getCon() throws SQLException{
return DriverManager.getConnection(url, username, password);
}
public static void closeAll(ResultSet rs, Statement stat, Connection con){
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (con != null) {
try {
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (stat != null) {
try {
stat.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Test
public void show1() {
try{
//2.获取连接
con = JDBC.getCon();
//3.获取sql语句的执行对象
statement = con.createStatement();
//4.执行sql语句
rs = statement.executeQuery("select *from emp");
//5.处理结果集
//getMetaData获取此 ResultSet 对象的列的编号、类型和属性。
//getColumnCount返回此 ResultSet 对象中的列数。
int count = rs.getMetaData().getColumnCount();
while (rs.next()) {
for (int i = 1; i <= count; i++) {
System.out.print(rs.getString(i));
System.out.print(",");
}
System.out.println();
}
}catch(Exception e){
throw new RuntimeException(e);
}finally{
//6.关掉资源
JDBC.closeAll(rs, statement, con);
}
}
//预处理
@Test
public void show2() {
try{
con = JDBC.getCon();
preparedStatement = con.prepareStatement("select * from emp where ename = ?");
preparedStatement.setString(1, "SCOTT");
rs = preparedStatement.executeQuery();
while (rs.next()) {
System.out.println(rs.getString("ename") + rs.getString("job") + rs.getString("sal"));
}
}catch(Exception e){
throw new RuntimeException(e);
}finally{
JDBC.closeAll(rs, preparedStatement, con);
}
}
}
二、代码块执行先后
父类
class fu{
static{
System.out.println("父类静态代码块,只执行一次");
}
{
System.out.println("父类构造代码块");
}
public fu(){
System.out.println("父类构造方法");
}
}
子类
class zi extends fu{
static{
System.out.println("子类静态代码块,只执行一次");
}
{
System.out.println("子类构造代码块");
}
public zi(){
System.out.println("子类构造方法");
}
}
测试
fu f = new zi();
测试结果
父类静态代码块,只执行一次
子类静态代码块,只执行一次
父类构造代码块
父类构造方法
子类构造代码块
子类构造方法
三、XML
<?xml version="1.0" encoding="UTF-8"?>
DTD
<!DOCTYPE beans SYSTEM "bean.dtd"> <!-- 本地 -->
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <!-- 公共 -->
<!-- 引入约束 一般都是直接复制即可
<!ATTLIST bean
id ID(元素的唯一性) #REQUIRED(属性是必须的)
type CDATA(文本类型) #IMPLIED(属性是可选的)>
-->
Schema
<beans xmlns="http://www.itcast.cn/bean"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.itcast.cn/bean bean-schema.xsd">
<!--
1.引入约束 复制 粘贴 补结束标签
2.xmlns="http://www.itcast.cn/bean" 自定义命名空间 引入哪个约束就写哪个约束的名字
3.xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 固定写法 官方文档起别名
4.xsi:schemaLocation="http://www.itcast.cn/bean bean-schema.xsd"
值1=引入的约束的名字 值2=引入的约束的位置
-->
SAXReader
SAXReader sr = new SAXReader();
Document document = sr.read(new File("aaa"));
Element element = document.getRootElement();
List<Element> list = element.elements();
for (Element element2 : list) {
String s1 = element2.attributeValue("className");
}
a)elements(…) 获得指定名称的所有子元素。可以不指定名称
b)element(…) 获得指定名称第一个子元素。可以不指定名称
c)getName() 获得当前元素的元素名
d)attributeValue(…) 获得指定属性名的属性值
e)elementText(…) 获得指定名称子元素的文本值
f)getText() 获得当前元素的文本内容
四、网络编程
InetAddress网络协议(ip)地址,内含主机名称、地址等信息,通过方法调用可以获得相关信息。
UDP:
发送端:
DatagramSocket ds = new DatagramSocket();
DatagramPacket dp = new DatagramPacket("你好".getBytes(), "你好".getBytes().length, InetAddress.getLocalHost(),6666);
ds.send(dp);
接收端:
DatagramSocket ds = new DatagramSocket(6666);
byte[] bytes = new byte[1024*64];
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
ds.receive(dp);
int port = dp.getPort();
InetAddress address = dp.getAddress();
ds.close();
System.out.println("" + address + ":" + port + ":" + new String(bytes));
TCP:
服务器:
ServerSocket server = new ServerSocket(6666);
System.out.println("服务器开启,端口6666");
while(true){
final Socket socket = server.accept();
new Thread(){
@Override
public void run() {
try {
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
PrintStream ps = new PrintStream(socket.getOutputStream());
String fileName = br.readLine();
File dir = new File("服务器文件夹");
dir.mkdir();
File file = new File(dir, fileName);
if (file.exists()) {
ps.println("存在");
socket.close();
return;
}else {
ps.println("不存在");
}
FileOutputStream fos = new FileOutputStream(file);
byte[] arr = new byte[8192];
int len;
while ((len = is.read(arr)) != -1){
fos.write(arr, 0, len);
}
fos.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
客户端:
File file = getFile();
Socket socket = new Socket("127.0.0.1",6666);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream ps = new PrintStream(socket.getOutputStream());
ps.println(file.getName());
String result = br.readLine();
if (result.equals("存在")) {
System.out.println("您输入的文件已存在");
socket.close();
return;
}
FileInputStream fis = new FileInputStream(file);
byte[] arr = new byte[8192];
int len;
while ((len = fis.read(arr)) != -1) {
ps.write(arr, 0, len);
}
fis.close();
socket.close();
五、基本数据类型
整数型:
byte 1个字节,-128~127
short 2个字节,-2^15~2^15-1
int 4个字节,-2^31~2^31-1,默认整数
long 8个字节,-2^63~2^63-1
浮点型:
float 4个字节,-3.403E38~3.403E38
double 8个字节,-1.798E308~1.798E308,默认小数
字符型:
char 2个字节,0~65535
布尔类型
boolean true/false
六、集合
七、流对象
八、线程状态
九、动态代理
Cglib
public static void cglib() {
final Student s = new HeimaStudent();
//Enhancer.create(Class,Callback);
//Callback:它是一个接口。我们一般不会直接用它,而是用它的子接口,MethodInterceptor。
Student newS = (Student)Enhancer.create(s.getClass(), new MethodInterceptor(){
@Override
public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable {
System.out.println("睡觉");
arg1.invoke(s, arg2);
System.out.println("上课");
return null;
}});
newS.show();
}
jdk
public static void proxy() {
final Student s = new HeimaStudent();
Student newS = (Student)Proxy.newProxyInstance(s.getClass().getClassLoader(), s.getClass().getInterfaces(),
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("上课");
method.invoke(s, args);
System.out.println("睡觉");
return null;
}
});
newS.show();
}