专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

android Studio与数据库SQLserver连接实现登录

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 0:41:22       共计:3604 浏览


主要用到:1.DBUtil 类,连接数据库的代码都在里边。
2. libs中的.jar包,着着非常重要,很多人忘记导入相应jar包导致找不到资源啥的。
3. AndroidManifest.xml中加权限
记得在AndroidManifest.xml中加入socket权限:

<uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
  • 1
  • 2
  • 3

2,3步不懂得可以参考:https://blog.csdn.net/na2609613672/article/details/82222795

DBUtil 类代码:

package com.monitorsys.seashell.myapp;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBUtil
{
    private  String name=null;
    private  String pass=null;
    
    public DBUtil(String m,String p){
        this.name=m;
        this.pass=p;
    }
    private static Connection getSQLConnection(String ip, String user, String pwd, String db)
    {
        Connection con = null;
        try
        {
            Class.forName("net.sourceforge.jtds.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:jtds:sqlserver://" + ip + ":1433/" + db + ";charset=utf8", user, pwd);
        } catch (ClassNotFoundException e)
        {
            e.printStackTrace();
        } catch (SQLException e)
        {
            e.printStackTrace();
        }
        return con;
    }

    public String QuerySQL()
    {
        String result = "";
        try
        {
            Connection conn= getSQLConnection("数据库地址", "用户名", "密码", "数据库名");//根据自己的数据库信息填写对应的值
            String sql = "select username from userinfo  where userpwd=? and  username=? ";
            PreparedStatement stat = conn.prepareStatement(sql);
            stat.setString(1, pass);
            stat.setString(2, name);
            ResultSet rs = stat.executeQuery();
            while (rs.next())
            {
                result= "1" ;
        }
            rs.close();
            conn.close();
        } catch (SQLException e)
        {
            e.printStackTrace();
            result += "查询数据异常!" + e.getMessage();
        }
        return result;
    }
    public static void main(String[] args)
    {
    }
}

LoginActivity代码:
1.主要看登陆,其他都是自动生成的

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        mEmailView = (AutoCompleteTextView) findViewById(R.id.email);//1.用户
        populateAutoComplete();//动态获取PERMISSION_GRANTED(通讯录权限)

        mPasswordView = (EditText) findViewById(R.id.password);//2.密码
        //setOnEditorActionListener:编辑完之后点击软键盘上的回车键才会触发
        mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {//当用户处在输入密码编辑框,软键盘打开,输入确定按钮(EditorInfo.IME_NUL)时尝试登录
                // 按下完成按钮,这里IME_ACTION_DONE和.xml中imeOptions对应
                if (id == EditorInfo.IME_ACTION_DONE || id == EditorInfo.IME_NULL) {
                    attemptLogin();
                    return true;//返回true,保留软键盘。false,隐藏软键盘
                }
                return false;
            }
        });
//3.登陆(看这里>>>>>>>>>>
   Button mEmailSignInButton = (Button) findViewById(R.id.email_sign_in_button);//找到按钮
      mEmailSignInButton.setOnClickListener(this.LoginInButtonlistener);//绑定监听器
        WorkThread wt=new WorkThread();
        wt.start();//调动子线程
//看到这就可以了>>>>>>>>>

   mLoginFormView = findViewById(R.id.login_form);//滑动视图
    mProgressView = findViewById(R.id.login_progress);//进度条
    }

2.点击登陆按钮后,触动监听器:

private View mProgressView;
    private View mLoginFormView;
    //按钮监听器
    View.OnClickListener LoginInButtonlistener = new View.OnClickListener()
    {
        public void onClick(View view) {
           String s= mPasswordView.getText().toString();//获取页面密码
            String sy=mEmailView.getText().toString();//获取页面用户名
            Message m=handler.obtainMessage();//获取事件
            Bundle b=new Bundle();
            b.putString("pass",s);//以键值对形式放进 Bundle中
            b.putString("name",sy);
            m.setData(b);          
            handler.sendMessage(m);//把信息放到通道中            
        }
    };

3.信息放到通道中 ,有信息后,looper工作,调用Handler中的handleMessage

class WorkThread extends  Thread{
        @Override
        public  void run(){
            Looper.prepare();
            handler=new Handler(){
                @Override
                public  void handleMessage(Message m){
                    super.handleMessage(m);
                    Bundle b= m.getData();//得到与信息对用的Bundle
                    String name=b.getString("name");//根据键取值
                    String pass=b.getString("pass");
                    DBUtil db=new DBUtil(name,pass);//调用数据库查询类
                    String ret=db.QuerySQL();//得到返回值
        if (ret.equals("1"))//为1,页面跳转,登陆成功
            {
                Intent localIntent = new Intent();
                localIntent.setClass(LoginActivity.this, SelectActivity.class);
                LoginActivity.this.startActivity(localIntent);
                Toast.makeText(LoginActivity.this, "登录成功",Toast.LENGTH_SHORT).show();//显示提示框
                return;
            }
            Toast.makeText(LoginActivity.this, "用户名或密码错误", Toast.LENGTH_SHORT).show();

                }
            };
            Looper.loop();//Looper循环,通道中有数据执行,无数据堵塞
        }
    }


登录页面:

因为很多网友源码,之前的找不到了,我又重新写了一个,页面设置有一点不同但逻辑相同,希望能帮助你们呢
百度网盘:https://pan.baidu.com/s/1PCNxogsp_txrVKQjKSjGeQ
密码:egqx

注:如果你的gradle版本和我的不一样导致下载的代码不能运行,可看我另一篇代码可以解决这个问题https://blog.csdn.net/na2609613672/article/details/89086952


版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:Android Studio环境下连接远程服务器中的sqlserver2012数据库方法 | ·下一条:android studio连接数据库

Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有