Этот вопрос является продолжением предыдущего вопроса, который у меня был: Как добавить новых пользователей в базу данных сервера SQL через графический интерфейс пользователя JAVA
В настоящее время мой вопрос: как я могу ограничить создание таблиц пользователями, созданными на сервере SQL, из графического интерфейса пользователя?
Ниже приведен код, над которым я сейчас работаю:
public class Users extends JFrame {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
int resultSetInt;
private JTable table;
private JPanel contentPane;
private JTextField UsernametextField;
private JTextField PasswordtextField;
private JCheckBox chckbxProducts;
public static final String DATABASE_URL = "jdbc:sqlserver://MYSERVER";
public String username = null;
public String password = null;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Users frame = new Users();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Users() {
setTitle("Add a User");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 360, 523);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JPanel panel = new JPanel();
panel.setBounds(10, 11, 323, 462);
contentPane.add(panel);
panel.setLayout(null);
UsernametextField = new JTextField();
UsernametextField.setBounds(10, 100, 115, 25);
panel.add(UsernametextField);
UsernametextField.setColumns(10);
JLabel lblUsername = new JLabel("Username");
lblUsername.setFont(new Font("Tahoma", Font.BOLD, 20));
lblUsername.setBounds(10, 60, 115, 25);
panel.add(lblUsername);
JLabel lblPassword = new JLabel("Password");
lblPassword.setFont(new Font("Tahoma", Font.BOLD, 20));
lblPassword.setBounds(10, 144, 115, 25);
panel.add(lblPassword);
PasswordtextField = new JTextField();
PasswordtextField.setBounds(10, 184, 115, 25);
panel.add(PasswordtextField);
PasswordtextField.setColumns(10);
JLabel lblUser = new JLabel("Add New User:");
lblUser.setFont(new Font("Tahoma", Font.BOLD, 22));
lblUser.setBounds(10, 11, 166, 25);
panel.add(lblUser);
JSeparator separator = new JSeparator();
separator.setBounds(0, 47, 323, 2);
panel.add(separator);
JButton btnNewButton = new JButton("Enter");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
connection = DriverManager.getConnection(AdminMenu.DATABASE_URL, AdminMenu.UserName, AdminMenu.Password);
statement = connection.createStatement();
String username = "";
String password = "";
username = UsernametextField.getText().trim();
password = PasswordtextField.getText().trim();
if (username.equals("")|| password.equals(""))
{
JOptionPane.showMessageDialog(null," name or password is wrong","Error",JOptionPane.ERROR_MESSAGE);
}
else
{
resultSetInt = statement.executeUpdate("CREATE LOGIN "+username+" WITH PASSWORD = '"+password+"'");
resultSetInt = statement.executeUpdate("IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'"+username+"') CREATE USER ["+username+"] FOR LOGIN ["+username+"] EXEC sp_addrolemember N'db_owner', N'"+username+"'");
//("CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD' GO USE BEPAWI GO IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'NewAdminName') BEGIN CREATE USER [NewAdminName] FOR LOGIN [NewAdminName] EXEC sp_addrolemember N'db_owner', N'NewAdminName' END;) VALUES('"+username+"', '"+password+"');");
String SMessage = "Record added for "+username;
// create dialog ox which is print message
JOptionPane.showMessageDialog(null,SMessage,"Message",JOptionPane.PLAIN_MESSAGE);
//close connection
}
if (chckbxProducts.isSelected()) {
//System.out.println("Is selected");
resultSetInt = statement.executeUpdate("GRANT INSERT, SELECT ON dbo.Products TO ["+username+"]");
}
else {
//System.out.println("Is not Selected");
resultSetInt = statement.executeUpdate("REVOKE INSERT, SELECT ON dbo.Products FROM ["+username+"]");
}
((java.sql.Connection)connection).close();
}
catch (SQLException se)
{
//handle errors for JDBC
se.printStackTrace();
}
catch (Exception a) //catch block
{
a.printStackTrace();
}
}
});
/*
chckbxProducts.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
try {
String username = "";
username = UsernametextField.getText().trim();
if (e.getStateChange() == 1) {
resultSetInt = statement.executeUpdate("GRANT INSERT, SELECT ON dbo.Products TO ["+username+"]");
} else {
resultSetInt = statement.executeUpdate("REVOKE INSERT, SELECT ON dbo.Products FROM ["+username+"]");
}
((java.sql.Connection)connection).close();
}
catch (SQLException se)
{
//handle errors for JDBC
se.printStackTrace();
}
catch (Exception a) //catch block
{
a.printStackTrace();
}
}
}); */
btnNewButton.setFont(new Font("Tahoma", Font.BOLD, 20));
btnNewButton.setBounds(207, 420, 106, 33);
panel.add(btnNewButton);
JCheckBox chckbxProducts = new JCheckBox("Products Table");
chckbxProducts.setBounds(10, 280, 115, 23);
panel.add(chckbxProducts);
JCheckBox chckbxClients = new JCheckBox("Clients Table");
chckbxClients.setBounds(10, 310, 115, 23);
panel.add(chckbxClients);
JCheckBox chckbxOrders = new JCheckBox("Orders Table");
chckbxOrders.setBounds(10, 340, 115, 23);
panel.add(chckbxOrders);
JCheckBox chckbxInvoices = new JCheckBox("Invoices Table");
chckbxInvoices.setBounds(10, 370, 115, 23);
panel.add(chckbxInvoices);
JLabel lblNewLabel = new JLabel("Table Access:");
lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 22));
lblNewLabel.setBounds(10, 235, 166, 25);
panel.add(lblNewLabel);
JCheckBox chckbxShipping = new JCheckBox("Shipping Orders Table");
chckbxShipping.setBounds(140, 280, 160, 23);
panel.add(chckbxShipping);
JCheckBox chckbxLocations = new JCheckBox("Locations Table");
chckbxLocations.setBounds(140, 310, 160, 23);
panel.add(chckbxLocations);
}
}
Как вы можете видеть, пользователь должен добавить нового пользователя и пароль, а затем установить флажки, которые он хочет, чтобы у нового пользователя был либо доступ, либо отсутствие доступа к таблице.
Я могу добавлять новых пользователей в базу данных сервера SQL; но я получаю следующее сообщение об ошибке:
java.lang.NullPointerException
at Users$2.actionPerformed(Users.java:154)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Это в значительной степени происходит.
Я ценю вашу помощь и еще раз спасибо.