導航:首頁 > 編程語言 > dbhelperjava

dbhelperjava

發布時間:2022-11-28 20:57:39

① 如何用Eclipse查詢資料庫表中的一行數據

java">比較簡單的方法:
資料庫連接:DBhelper.java
packagetest;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Statement;

publicclassDBhelper{
//500
privateStatementstmt;//語句對象(發送SQL語句)
privateConnectionconn;//資料庫連接
privateResultSetrs;

publicDBhelper(){//構造方法在創建對象的時候執行
try{
Stringurl="jdbc:mysql://localhost:3306/test";
Stringusername="root";
Stringpassword="admin";
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection(url,username,password);//嘗試連接成功得到連接
stmt=conn.createStatement();//創建語句對象
}catch(Exceptione){
e.printStackTrace();
}
}
//執行更新
//insertdeleteupdate
publicvoiddoUpdate(Stringsql){

try{
stmt.executeUpdate(sql);
}catch(Exceptione){
e.printStackTrace();
}
}

//執行查詢
//select
publicResultSetdoQuery(Stringsql){

try{
rs=stmt.executeQuery(sql);
returnrs;
}catch(Exceptione){
e.printStackTrace();
}
returnnull;
}


publicvoidclose(){

try{
if(rs!=null)
rs.close();
}catch(SQLExceptione){
e.printStackTrace();
}
try{
if(stmt!=null)
stmt.close();
}catch(SQLExceptione){
e.printStackTrace();
}
try{
if(conn!=null)
conn.close();
}catch(SQLExceptione){
e.printStackTrace();
}
}

}

測試文件:test.java

在main方法中加入如下代碼:

DBhelper db = new DBhelper();//操作資料庫的幫助類
ResultSet rs = db.doQuery(" select * from student" );//rs:結果集
//想單獨查詢一行,可以在SQL語句後添加限制條件where id=
try {
//從resultSet里把數據取出來,放入表格里
while( rs.next() ){//取結果集里下一條數據
System.out.print(" "+rs.getString("id"));

System.out.print(" "+rs.getString("name"));

System.out.print(" "+rs.getString("password"));

}

} catch (SQLException e) {
e.printStackTrace();
}

② java解析dbf格式時裡面數據類型怎麼判斷

使用JDBC-ODBC橋接方式讀取Access文件,使用Acces
與DBF都需要配置橋接模式,在控制面板里,選擇管理工具里配置

  • Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//載入驅動

  • try{

  • //conn=DriverManager.getConnection(DB_URL);

  • conn=DriverManager.getConnection("jdbc:odbc:ss","test.dbf","");//無密碼則空字元串

  • pstm=conn.prepareStatement("select*fromtest");//此處的XXB為DBF數據文件的名字

  • rs=pstm.executeQuery();



  • 至此,完美解決DBF資料庫文件讀取。網上的東西,太雜了,所以,我們要理智判斷,取其精華,去其糟粕,為我所用。

    終於被我找到了!
    完全free的: com/ 這個網站主要是做資料庫連接中間介的,其中用到了一個他們自己開發的叫做JDBF的項目,該項目就是專門控制dbf文件的,整個包只有30K大小,你們隨便用個工具反編譯一下就可以看懂裡面的代碼,很簡單,就是按照具體格式處理文件!(注意,不是使用JDBC連接的。)
    不過我試了一下,發現只支持三中格式的:foxpro2.x、DBase IV、DBase III。
    大家用得著的話可以去那裡下載! 有問題的話可以再來問我。

    我發現國外的這類開源網站很多,國內的就少得可憐了!唉!

    ③ 如何用Java實現把excel表中的數據導入到mysql資料庫已有的表中

    package com.cn.gao;

    import java.util.List;

    public class FromExcelToDb {
    public static void main(String[] args) {
    //得到表格中所有的數據
    List<Stu> listExcel=StuService.getAllByExcel("d://book.xls");
    /*//得到資料庫表中所有的數據
    List<Stu> listDb=StuService.getAllByDb();*/

    DBhelper db=new DBhelper();

    for (Stu stuEntity : listExcel) {
    int id=stuEntity.getId();
    if (!StuService.isExist(id)) {
    //不存在就添加
    String sql="insert into student (name,sex,num) values(?,?,?)";
    String[] str=new String[]{stuEntity.getName(),stuEntity.getSex(),stuEntity.getNum()+""};
    db.AddU(sql, str);
    }else {
    //存在就更新
    String sql="update student set name=?,sex=?,num=? where id=?";
    String[] str=new String[]{stuEntity.getName(),stuEntity.getSex(),stuEntity.getNum()+"",id+""};
    db.AddU(sql, str);
    }
    }
    System.out.println("數據更新成功!");
    }
    }

    ④ DBHelper在Java中是干什麼的,怎樣應用

    看名字就是databasehelper,資料庫助手的意思么,這本身就是一個類。
    包含了資料庫連接,關閉,如果有拓展的話 可能包含基本的資料庫JDBC操作方法也就是簡化增刪改查的一些方法。然後,就沒有然後了。。。
    如果需要的話 網路搜索下就有了,很多改良版本看需求吧。
    一般說來 .NET裡面才叫DBHelper,JAVA裡面叫做BaseDao

    ⑤ JAVA資料庫連接失敗

    publicstaticvoidmain(String[]args){
    try
    {
    if(conn!=null)
    {
    System.out.println("資料庫連接正常");
    }
    else
    {
    System.out.println("資料庫連接異常");
    }
    }
    catch(Exceptionex)
    {
    ex.printStackTrace();
    }
    }

    這里conn沒有初始化吧,

    Connection conn =newDBHelper ().getConnection();

    ⑥ java的DBHelper類有沒有這樣的功能

    public ResultSet getResultSet(String sql,Object[] object)
    {
    if(con==null)
    {
    this.getConnection();
    }
    try {
    pstmt=con.prepareStatement(sql);
    for(int i=0;i<object.length;i++)
    {
    pstmt.setObject(i+1, object[i]);
    }
    rs=pstmt.executeQuery();
    } catch (SQLException e) {
    // TODO 自動生成 catch 塊
    e.printStackTrace();
    }
    return rs;
    }
    如果還有什麼疑問.. 請網路Hi我.. 我會進一步的為你解答..

    ⑦ java是怎麼連接mysql資料庫的

    java連接mysql資料庫的步驟如下:
    首先要下載mysql-connection-java-5.0.16-bin.jar這個jar包(版本不一致沒關系),然後在工程中導入該庫文件。
    然後寫一個類(DBHelper)用來打開或關閉資料庫:

    package com.hu.demo;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    public class DBHelper {
    public static final String url = "jdbc:mysql://127.0.0.1/student";
    public static final String name = "com.mysql.jdbc.Driver";
    public static final String user = "root";
    public static final String password = "root";
    public Connection conn = null;
    public PreparedStatement pst = null;
    public DBHelper(String sql) {
    try {
    Class.forName(name);//指定連接類型
    conn = DriverManager.getConnection(url, user, password);//獲取連接
    pst = conn.prepareStatement(sql);//准備執行語句
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    public void close() {
    try {
    this.conn.close();
    this.pst.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }
    最後再寫一個Demo類來執行相關查詢操作:
    package com.hu.demo;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    public class Demo {
    static String sql = null;
    static DBHelper db1 = null;
    static ResultSet ret = null;
    public static void main(String[] args) {
    sql = "select *from stuinfo";//SQL語句
    db1 = new DBHelper(sql);//創建DBHelper對象
    try {
    ret = db1.pst.executeQuery();//執行語句,得到結果集
    while (ret.next()) {
    String uid = ret.getString(1);
    String ufname = ret.getString(2);
    String ulname = ret.getString(3);
    String udate = ret.getString(4);
    System.out.println(uid + "\t" + ufname + "\t" + ulname + "\t" + udate );
    }//顯示數據
    ret.close();
    db1.close();//關閉連接
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }

    這樣就完成了mysql資料庫的連接了。

    ⑧ java資料庫增加數據,怎麼在控制台輸出表中的數據總數啊

    把String sql="select * from student" 這條語句代碼換成
    String sql="select count(*) from student"就可以得到學生表所有記錄數,
    然後在test方法里添加一個局部變數int rec=0;
    執行完sql語句後輸出後用rec接收表的記錄數
    接下來用 Object recontu = getObject(int columnIndex);
    然後把recountu轉換成int類型並用rec接收,再調用System.out.println()進行輸出

    android程序資料庫問題... DBHelper helper = new DBHelper(this, DB_NAME, null, VERSION); 不懂啊

    這里用ContentProvider方法來定義資料庫。。
    public class AlarmProvider extends ContentProvider //
    {

    private static final String DB_NAME = "Alarm.db"; //資料庫名

    private static final int DB_VERSION = 1;//版本號,當程序第一次運行時,資料庫被建立,如果
    //你更改了資料庫,如增加一個表,這時,這個值一般要改一下,這樣程序再次安裝運行
    //時,資料庫可自行升級。。如果不改通常要手動刪除資料庫。。

    private static final String ALARM_TABLE_NAME = "alarm"; //一個表名
    private static final int ALARM = 1; //與表對應的整數值,相當於id

    private static UriMatcher mUriMathcer; //Uri匹配器,建立uri,表名,id三者之間的關系,如下:

    static{
    mUriMathcer = new UriMatcher(UriMatcher.NO_MATCH);
    mUriMathcer.addURI(AlarmInfo.AUTH, "alarm", ALARM);
    }

    private interface CreateTableInterface //表創建介面
    {
    public abstract void createAlarmTable(SQLiteDatabase db);
    }
    //內部類,資料庫助手類,並實現表創建介面
    private static class DatabaseHelper extends SQLiteOpenHelper implements CreateTableInterface
    {

    CreateTableInterface mCreateTableInterface = this;

    Context mContext = null;

    //構造函數,該函數調用後,資料庫沒有
    //創建。。也就是下面的onCreate不會在它調用後就立即調用創建db
    public DatabaseHelper(Context context)
    {

    super(context, DB_NAME, null, DB_VERSION);
    // Log.i(TAG, "DatabaseHelper be called!");
    mContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) //這個方法只在第一次db連接創建db時調用,只一次
    {
    //create db table
    mCreateTableInterface.createAlarmTable(db);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) //db升級時調用
    {
    // Log.i(TAG, "onUpgrade() be called!");
    db.execSQL("DROP TABLE IF EXISTS "+ALARM_TABLE_NAME);
    onCreate(db);
    }

    @Override
    public void createAlarmTable(SQLiteDatabase db)
    {
    // 創建表
    db.execSQL("CREATE TABLE "+ALARM_TABLE_NAME+" ("
    +AlarmInfo._ID+" INTEGER PRIMARY KEY,"
    +AlarmInfo._LABEL+" TEXT NOT NULL,"
    +AlarmInfo._TIME+" TEXT NOT NULL,"
    +AlarmInfo._ALERT+" TEXT NOT NULL,"
    +AlarmInfo._REPEAT+" TEXT NOT NULL,"
    +AlarmInfo._ACTIVE+" TEXT NOT NULL"
    +");");
    //在表中插入一些數據。。。
    db.execSQL("INSERT INTO "+ALARM_TABLE_NAME+"("+AlarmInfo._LABEL+","
    +AlarmInfo._TIME+","+AlarmInfo._ALERT+","
    +AlarmInfo._REPEAT+","+AlarmInfo._ACTIVE+
    ") VALUES('Lunch Alarm','11 : 45 AM','"+Tag.TONE+"','"+Tag.EVERY_DAY+"','false');");

    db.execSQL("INSERT INTO "+ALARM_TABLE_NAME+"("+AlarmInfo._LABEL+","
    +AlarmInfo._TIME+","+AlarmInfo._ALERT+","
    +AlarmInfo._REPEAT+","+AlarmInfo._ACTIVE
    +") VALUES('Work Alarm','08 : 45 AM','"+Tag.TONE+"',"+"'Mon,Tue,Wed,Thu,Fri'"
    +",'false');");

    db.execSQL("INSERT INTO "+ALARM_TABLE_NAME+"("+AlarmInfo._LABEL+","
    +AlarmInfo._TIME+","+AlarmInfo._ALERT+","+AlarmInfo._REPEAT+","
    +AlarmInfo._ACTIVE
    +") VALUES('Work Alarm','09 : 00 AM','"+Tag.TONE+"',"
    +"'"+Tag.WEEKENDS+"','false');");
    db.execSQL("INSERT INTO "+ALARM_TABLE_NAME+"("+AlarmInfo._LABEL+","
    +AlarmInfo._TIME+","+AlarmInfo._ALERT+","+AlarmInfo._REPEAT+","
    +AlarmInfo._ACTIVE
    +") VALUES('Yoga','10 : 15 PM','"+Tag.TONE+"',"+"'Sun,Wed','false');");
    }
    }
    }

    private DatabaseHelper mDatabaseHelper; //定義helper

    //以下重寫insert,delete,update,query等方法
    @Override
    public synchronized int delete(Uri uri, String selection, String[] selectionArgs)
    {
    SQLiteDatabase db = null;
    boolean success = false;
    int count = 0;
    try{
    db = mDatabaseHelper.getWritableDatabase();
    db.acquireReference();
    success = true;
    switch(mUriMathcer.match(uri)){
    case ALARM:
    count = db.delete(ALARM_TABLE_NAME, selection, selectionArgs);
    break;
    }
    }catch(SQLException e){
    e.printStackTrace();
    }finally{
    if(success == true){
    db.releaseReference();
    }
    }

    return count;
    }

    @Override
    public String getType(Uri uri)
    {
    switch(mUriMathcer.match(uri)){
    case ALARM:
    return AlarmInfo.CONTENT_TYPE;
    default:
    throw new IllegalArgumentException("Unknown URI " + uri);
    }
    }

    @Override
    public synchronized Uri insert(Uri uri, ContentValues initValues)
    {
    SQLiteDatabase mSQLiteDatabase = null;
    boolean success = false;
    try{
    mSQLiteDatabase = mDatabaseHelper.getWritableDatabase();
    mSQLiteDatabase.acquireReference();
    success = true;
    long mRowId;
    ContentValues values;
    if(initValues == null){
    values = new ContentValues();
    }else{
    values = initValues;
    }
    switch(mUriMathcer.match(uri)){
    case ALARM:
    mRowId = mSQLiteDatabase.insert(ALARM_TABLE_NAME,
    AlarmInfo._ID, values);
    if(mRowId > 0){
    return uri;
    }else{
    throw new SQLException("Failed to insert to "+uri);
    }
    }

    }catch(SQLException e){
    e.printStackTrace();
    }finally{
    if(success == true)
    mSQLiteDatabase.releaseReference();
    }
    return null;
    }

    @Override
    public boolean onCreate()
    {
    // Log.i("alarm provider", "onCreate()...");
    mDatabaseHelper = new DatabaseHelper(getContext());
    return true;
    }

    @Override
    public synchronized Cursor query(Uri uri, String[] projection, String selection,
    String[] selectionArgs, String sortOrder)
    {
    SQLiteQueryBuilder mSQLiteQueryBuilder = new SQLiteQueryBuilder();
    switch(mUriMathcer.match(uri)){
    case ALARM:
    mSQLiteQueryBuilder.setTables(ALARM_TABLE_NAME);
    break;
    }
    SQLiteDatabase mSQLiteDatabase = mDatabaseHelper.getWritableDatabase();
    mSQLiteDatabase.acquireReference();

    Cursor mCursor = mSQLiteQueryBuilder.query(mSQLiteDatabase, projection,
    selection, selectionArgs, null, null, sortOrder);
    mSQLiteDatabase.releaseReference();
    return mCursor;
    }

    @Override
    public synchronized int update(Uri uri, ContentValues values, String selection,
    String[] selectionArgs)
    {
    SQLiteDatabase mSQLiteDatabase = null;
    int count = 0;
    boolean success = false;
    try{
    mSQLiteDatabase = mDatabaseHelper.getWritableDatabase();
    mSQLiteDatabase.acquireReference();
    success = true;
    switch(mUriMathcer.match(uri)){
    case ALARM:
    count = mSQLiteDatabase.update(ALARM_TABLE_NAME, values,
    selection, selectionArgs);
    break;

    default:
    break;
    }

    }catch(SQLException e){
    e.printStackTrace();
    }finally{
    if(success == true)
    mSQLiteDatabase.releaseReference();
    }
    return count;
    }

    }
    可以參考android alarm源碼,query,update等方法寫法基本不改什麼,只替換表名。或增加一個case.

    ⑩ java登錄模塊驗證出現問題求解答

    前期准備
    首先要先明確有個大體的思路,要實現什麼樣的功能,了解完成整個模塊要運用到哪些方面的知識,以及從做的過程中去發現自己的不足。技術方面的進步大都都需要從實踐中出來的。
    功能:用戶注冊功能+系統登錄功能+生成驗證碼
    知識:窗體設計、資料庫設計、JavaBean封裝屬性、JDBC實現對資料庫的連接、驗證碼(包括彩色驗證碼)生成技術,還有就些比如像使用正則表達式校驗用戶注冊信息、隨機獲得字元串、對文本可用字元數的控制等
    設計的模塊預覽圖:

    使用BoxLayout布局,將控制項排列方式設置從上至下:

    復制代碼代碼如下:

    contentPane.setLayout(new BoxLayout(contentPane,BoxLayout.PAGE_AXIS));

    窗體使用了標簽、文本域、密碼域和按鈕等控制項
    實現代碼:

    public class login extends JFrame{
    private static final long serialVersionUID = -4655235896173916415L;
    private JPanel contentPane;
    private JTextField usernameTextField;
    private JPasswordField passwordField;
    private JTextField validateTextField;
    private String randomText;
    public static void main(String args[]){
    try {
    UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
    } catch (Throwable e) {
    e.printStackTrace();
    }
    EventQueue.invokeLater(new Runnable(){
    public void run(){
    try{
    login frame=new login();
    frame.setVisible(true);
    }catch(Exception e){
    e.printStackTrace();
    }
    }
    });

    }
    public login(){
    setTitle("系統登錄");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    contentPane=new JPanel();
    setContentPane(contentPane);
    contentPane.setLayout(new BoxLayout(contentPane,BoxLayout.PAGE_AXIS));

    JPanel usernamePanel=new JPanel();
    contentPane.add(usernamePanel);

    JLabel usernameLable=new JLabel("u7528u6237u540DuFF1A");
    usernameLable.setFont(new Font("微軟雅黑", Font.PLAIN, 15));
    usernamePanel.add(usernameLable);

    usernameTextField=new JTextField();
    usernameTextField.setFont(new Font("微軟雅黑", Font.PLAIN, 15));
    usernamePanel.add(usernameTextField);
    usernameTextField.setColumns(10);

    JPanel passwordPanel = new JPanel();
    contentPane.add(passwordPanel);
    JLabel passwordLabel = new JLabel("u5BC6 u7801uFF1A");
    passwordLabel.setFont(new Font("微軟雅黑", Font.PLAIN, 15));
    passwordPanel.add(passwordLabel);
    passwordField = new JPasswordField();
    passwordField.setColumns(10);
    passwordField.setFont(new Font("微軟雅黑", Font.PLAIN, 15));
    passwordPanel.add(passwordField);
    JPanel validatePanel = new JPanel();
    contentPane.add(validatePanel);
    JLabel validateLabel = new JLabel("u9A8Cu8BC1u7801uFF1A");
    validateLabel.setFont(new Font("微軟雅黑", Font.PLAIN, 15));
    validatePanel.add(validateLabel);
    validateTextField = new JTextField();
    validateTextField.setFont(new Font("微軟雅黑", Font.PLAIN, 15));
    validatePanel.add(validateTextField);
    validateTextField.setColumns(5);
    randomText = RandomStringUtils.randomAlphanumeric(4);
    CAPTCHALabel label = new CAPTCHALabel(randomText);//隨機驗證碼
    label.setFont(new Font("微軟雅黑", Font.PLAIN, 15));
    validatePanel.add(label);

    JPanel buttonPanel=new JPanel();
    contentPane.add(buttonPanel);

    JButton submitButton=new JButton("登錄");
    submitButton.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
    do_submitButton_actionPerformed(e);
    }
    });
    submitButton.setFont(new Font("微軟雅黑", Font.PLAIN, 15));
    buttonPanel.add(submitButton);

    JButton cancelButton=new JButton("退出");
    cancelButton.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    do_cancelButton_actionPerformed(e);
    }
    });
    cancelButton.setFont(new Font("微軟雅黑",Font.PLAIN,15));
    buttonPanel.add(cancelButton);

    pack();// 自動調整窗體大小
    setLocation(com.lixiyu.util.SwingUtil.centreContainer(getSize()));// 讓窗體居中顯示

    }

    窗體居中顯示:

    public class SwingUtil {
    /*
    * 根據容器的大小,計算居中顯示時左上角坐標
    *
    * @return 容器左上角坐標
    */
    public static Point centreContainer(Dimension size) {
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();// 獲得屏幕大小
    int x = (screenSize.width - size.width) / 2;// 計算左上角的x坐標
    int y = (screenSize.height - size.height) / 2;// 計算左上角的y坐標
    return new Point(x, y);// 返回左上角坐標
    }
    }

    1.2獲取及繪制驗證碼

    public class CAPTCHALabel extends JLabel {
    private static final long serialVersionUID = -963570191302793615L;
    private String text;// 用於保存生成驗證圖片的字元串
    public CAPTCHALabel(String text) {
    this.text = text;
    setPreferredSize(new Dimension(60, 36));// 設置標簽的大小
    }
    @Override
    public void paint(Graphics g) {
    super.paint(g);// 調用父類的構造方法
    g.setFont(new Font("微軟雅黑", Font.PLAIN, 16));// 設置字體
    g.drawString(text, 5, 25);// 繪制字元串
    }
    }

    *彩色驗證碼:

    public class ColorfulCAPTCHALabel extends JLabel {
    private static final long serialVersionUID = -963570191302793615L;
    private String text;// 用於保存生成驗證圖片的字元串
    private Color[] colors = { Color.BLACK, Color.BLUE, Color.CYAN, Color.DARK_GRAY, Color.GRAY, Color.GREEN, Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE,
    Color.PINK, Color.RED, Color.WHITE, Color.YELLOW };// 定義畫筆顏色數組
    public ColorfulCAPTCHALabel(String text) {
    this.text = text;
    setPreferredSize(new Dimension(60, 36));// 設置標簽的大小
    }
    @Override
    public void paint(Graphics g) {
    super.paint(g);// 調用父類的構造方法
    g.setFont(new Font("微軟雅黑", Font.PLAIN, 16));// 設置字體
    for (int i = 0; i < text.length(); i++) {
    g.setColor(colors[RandomUtils.nextInt(colors.length)]);
    g.drawString("" + text.charAt(i), 5 + i * 13, 25);// 繪制字元串
    }
    }
    }

    1

    閱讀全文

    與dbhelperjava相關的資料

    熱點內容
    小米sd卡解壓 瀏覽:996
    程序員那麼可愛陸漓替老袁說情 瀏覽:28
    當女程序員遇見問題 瀏覽:746
    32位編譯器什麼意思 瀏覽:355
    php多參數函數 瀏覽:17
    通達信板塊動作源碼 瀏覽:751
    matlab完全自學一本通pdf 瀏覽:249
    php源碼本地安裝 瀏覽:961
    伺服器怎麼用不會斷電 瀏覽:301
    主從伺服器有什麼用 瀏覽:213
    jstlpdf 瀏覽:14
    安卓原神在哪個app下載 瀏覽:808
    單片機編程技術什麼意思 瀏覽:104
    e點課堂源碼 瀏覽:45
    免費打擊墊app哪個好 瀏覽:532
    程序員必裝的6款軟體 瀏覽:750
    基於單片機的遙控器設計 瀏覽:521
    安卓如何取消圓圖標 瀏覽:11
    收件伺服器怎麼樣 瀏覽:48
    建築設計規范pdf 瀏覽:99