package mysql;
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括蟠龍網(wǎng)站建設(shè)、蟠龍網(wǎng)站制作、蟠龍網(wǎng)頁(yè)制作以及蟠龍網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,蟠龍網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到蟠龍省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
import java.sql.*;
/**
* @author xys
*/
public class ConnectMysql {
public static Connection getConnection() throws ClassNotFoundException, SQLException {
String url = "jdbc:mysql://localhost:3306/databaseName";
String user = "mysqluser";
String password = "password";
String driverClass = "com.mysql.cj.jdbc.Driver";
Connection connection = null;
Class.forName(driverClass);
try {
connection = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
e.printStackTrace();
}
if (connection != null) {
System.out.println("數(shù)據(jù)庫(kù)連接成功");
} else {
System.out.println("數(shù)據(jù)庫(kù)連接失敗");
connection.close();
}
return connection;
}
public void getResult() throws ClassNotFoundException, SQLException {
// 實(shí)例化 Statement 對(duì)象
Statement statement = getConnection().createStatement();
// 要執(zhí)行的 Mysql 數(shù)據(jù)庫(kù)操作語句(增、刪、改、查)
String sql = "";
// 展開結(jié)果集數(shù)據(jù)庫(kù)
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
// 通過字段檢索
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
// 輸出數(shù)據(jù)
System.out.println("ID : " +id);
System.out.println("name :" + name);
}
// 完成后需要依次關(guān)閉
resultSet.close();
statement.close();
getConnection().close();
}
}
程序客戶端代碼也與此類似 客戶端采用循環(huán)不斷地讀取用戶鍵盤輸入 每當(dāng)讀到用戶輸入內(nèi)容后就將該內(nèi)容封裝成DatagramPacket數(shù)據(jù)報(bào) 再將該數(shù)據(jù)報(bào)發(fā)送出去 接著把DatagramSocket中的數(shù)據(jù)讀入接收用的DatagramPacket中(實(shí)際上是讀入該DatagramPacket所封裝的字節(jié)數(shù)組中) 客戶端代碼如下
程序清單 codes/ / /UdpClient java
public class UdpClient
{
//定義發(fā)送數(shù)據(jù)報(bào)的目的地
public static final int DEST_PORT = ;
public static final String DEST_IP = ;
//定義每個(gè)數(shù)據(jù)報(bào)的最大大小為 K
private static final int DATA_LEN = ;
//定義該客戶端使用的DatagramSocket
private DatagramSocket socket = null;
//定義接收網(wǎng)絡(luò)數(shù)據(jù)的字節(jié)數(shù)組
byte[] inBuff = new byte[DATA_LEN];
//以指定字節(jié)數(shù)組創(chuàng)建準(zhǔn)備接受數(shù)據(jù)的DatagramPacket對(duì)象
private DatagramPacket inPacket =
new DatagramPacket(inBuff inBuff length)
//定義一個(gè)用于發(fā)送的DatagramPacket對(duì)象
private DatagramPacket outPacket = null;
public void init()throws IOException
{
try
{
//創(chuàng)建一個(gè)客戶端DatagramSocket 使用隨機(jī)端口
socket = new DatagramSocket()
//初始化發(fā)送用的DatagramSocket 它包含一個(gè)長(zhǎng)度為 的字節(jié)數(shù)組
outPacket = new DatagramPacket(new byte[ ]
InetAddress getByName(DEST_IP) DEST_PORT)
//創(chuàng)建鍵盤輸入流
Scanner scan = new Scanner(System in)
//不斷讀取鍵盤輸入
while(scan hasNextLine())
{
//將鍵盤輸入的一行字符串轉(zhuǎn)換字節(jié)數(shù)組
byte[] buff = scan nextLine() getBytes()
//設(shè)置發(fā)送用的DatagramPacket里的字節(jié)數(shù)據(jù)
outPacket setData(buff)
//發(fā)送數(shù)據(jù)報(bào)
socket send(outPacket)
//讀取Socket中的數(shù)據(jù) 讀到的數(shù)據(jù)放在inPacket所封裝的字節(jié)數(shù)組里
socket receive(inPacket)
System out println(new String(inBuff
inPacket getLength()))
}
}
//使用finally塊保證關(guān)閉資源
finally
{
if (socket != null)
{
socket close()
}
}
}
public static void main(String[] args)
throws IOException
{
new UdpClient() init()
}
}
上面程序的粗體字代碼同樣也是通過DatagramSocket發(fā)送 接收DatagramPacket的關(guān)鍵代碼 這些代碼與服務(wù)器的代碼基本相似 而客戶端與服務(wù)器端的唯一區(qū)別在于 服務(wù)器所在IP地址 端口是固定的 所以客戶端可以直接將該數(shù)據(jù)報(bào)發(fā)送給服務(wù)器 而服務(wù)器則需要根據(jù)接收到的數(shù)據(jù)報(bào)來決定將 反饋 數(shù)據(jù)報(bào)的目的地
讀者可能會(huì)發(fā)現(xiàn) 使用DatagramSocket進(jìn)行網(wǎng)絡(luò)通信時(shí) 服務(wù)器端無須 也無法保存每個(gè)客戶端的狀態(tài) 客戶端把數(shù)據(jù)報(bào)發(fā)送到服務(wù)器后 完全有可能立即退出 但不管客戶端是否退出 服務(wù)器無法知道客戶端的狀態(tài)
當(dāng)使用UDP協(xié)議時(shí) 如果想讓一個(gè)客戶端發(fā)送的聊天信息可被轉(zhuǎn)發(fā)到其他所有客戶端則比較困難 可以考慮在服務(wù)器使用Set來保存所有客戶端信息 每當(dāng)接收到一個(gè)客戶端的數(shù)據(jù)報(bào)之后 程序檢查該數(shù)據(jù)報(bào)的源SocketAddress是否在Set集合中 如果不在就將該SocketAddress添加到該Set集合中 但這樣一來又涉及一個(gè)問題 可能有些客戶端發(fā)送一個(gè)數(shù)據(jù)報(bào)之后永久性地退出了程序 但服務(wù)器端還將該客戶端的SocketAddress保存在Set集合中……總之 這種方式需要處理的問題比較多 編程比較煩瑣 幸好Java為UDP協(xié)議提供了MulticastSocket類 通過該類可以輕松實(shí)現(xiàn)多點(diǎn)廣播
返回目錄 瘋狂Java講義
編輯推薦
Java程序性能優(yōu)化 讓你的Java程序更快 更穩(wěn)定
新手學(xué)Java 編程
Java程序設(shè)計(jì)培訓(xùn)視頻教程
lishixinzhi/Article/program/Java/hx/201311/27260
我自己寫的代碼:
import?java.io.IOException;
import?java.net.DatagramPacket;
import?java.net.DatagramSocket;
import?java.net.InetAddress;
import?java.net.SocketException;
import?java.net.UnknownHostException;
public?class?UdpRecvDemo
{
public?static?void?main(String[]?args)?throws?IOException
{
Recv();
}
public?static?void?Recv()?throws?IOException
{
System.out.println("接受開始......");
DatagramSocket?ds?=?new?DatagramSocket(3388);
while(true)
{
byte[]buf?=?new?byte[1024];
DatagramPacket?dp?=?new?DatagramPacket(buf,buf.length);
ds.receive(dp);
System.out.println(ds);
String?ip?=?dp.getAddress().getHostAddress();
int?port?=?dp.getPort();
String?text?=?new?String(dp.getData(),0,dp.getLength());
if(text.equals("exit"))
{
System.out.println(ip+"退出會(huì)話......");
break;
}
System.out.println(ip+":"+port+"===me?"+text);
}
ds.close();
}
}
public?class?Util{
public?static?void?main(String[] args){
java.util.Scanner?sc?=?new?java.util.Scanner(System.in);
String[] arr =?new?String[5];
for(int?i =?0; i arr.length; i++){
arr[i] = sc.next();
}
//這里使用util.Arrays的代碼輸出數(shù)組
System.out.println(java.util.Arrays.toString(arr));
}
}
擴(kuò)展資料:
java中接受用戶輸入的其他方法
package 控制臺(tái)接受輸入;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.Buffer;
import java.util.Scanner;
public class InputCode {
public static void main(String[] args) throws IOException {
/*
* Scanner類中的方法
* 完美
*/
Scanner input =new Scanner(System.in);
System.out.println("please input your name ");
String name=input.nextLine();
System.out.println(name);
/*
* 缺點(diǎn):只能接受用戶輸入的一個(gè)字符
*/
System.out.println("enter your name");
char name1 = 0;
try {
//inputstream中的read()方法放回輸入流中下一個(gè)字符
name1 = (char) System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(name1);
/*
* InputStreamReader和BufferedReader方法
* 優(yōu)點(diǎn):可以獲取字符串
* 缺點(diǎn):獲取的是int或者string人需要強(qiáng)轉(zhuǎn)
*/
//通常,Reader 所作的每個(gè)讀取請(qǐng)求都會(huì)導(dǎo)致對(duì)底層字符或字節(jié)流進(jìn)行相應(yīng)的讀取請(qǐng)求。因此,建議用 BufferedReader
//包裝所有其 read() 操作可能開銷很高的 Reader(如 FileReader 和 InputStreamReader)。例如,
//BufferedReader in= new BufferedReader(new FileReader("foo.in"));
System.out.println("enter your name");
InputStreamReader input1=new InputStreamReader(System.in);
BufferedReader in=new BufferedReader(input1);
String name2=in.readLine();
System.out.println(name2);
}
}
action接收jsp傳來的值,主要的方式是將數(shù)據(jù)放在request對(duì)象中,然后在另一個(gè)頁(yè)面拿到這個(gè)數(shù)據(jù)即可。
代碼如下:
A.jsp :通過post 和get、連接都可以傳
a標(biāo)簽連接的:
a herf='B.jsp?name=%=name%'傳遞到B頁(yè)面/aB.jsp :
B頁(yè)面通過如下代碼接收:
%String name=request.getParameter("name");out.println("接收到:"+name);%